zoukankan      html  css  js  c++  java
  • PAT1055___排序神题

    题目意思比较简单,按财富,年龄,姓名来排序

    看似挺普通的,但被坑了20多次TLE

    首先排序只要一次,就是按题目规定的进行排序

    然后在查询的时候,不是从头扫到尾看是否符合年龄的限制,而是记录这个年龄组在数组中的起始结束位置是多少,AC

    #include<stdio.h>
    #include<iostream>
    #include<queue>
    #include<vector>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    
    struct data{
        char name[19];
        int age;
        int worth;
    }s[100099];
    int ageFrom[209],ageEnd[209];
    
    int cmp(data x,data y){
        if(x.worth==y.worth)
            if(x.age==y.age)
                return strcmp(x.name,y.name)<0;
            else
                return x.age<y.age;
        else
            return x.worth>y.worth;
    }
    
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);{
            data temp;
            int i;
            for(i=0;i<=200;i++){
                ageFrom[i]=-1;
                ageEnd[i]=-1;
            }
            for(i=1;i<=n;i++){
                scanf("%s",s[i].name);
                scanf("%d%d",&s[i].age,&s[i].worth);
            }
            sort(&s[1],&s[1+n],cmp);
    
            for(i=1;i<=n;i++){
                if(ageFrom[s[i].age]==-1){
                    ageFrom[s[i].age]=i;
                }
                ageEnd[s[i].age]=i;
            }
    
            int j,k;
            for(i=1;i<=m;i++){
                printf("Case #%d:
    ",i);
                int size,ll,rr,add=0,first=9999999,end=0;
                scanf("%d%d%d",&size,&ll,&rr);
                for(k=ll;k<=rr;k++){
                    first=min(first,ageFrom[k]);
                    end=max(end,ageEnd[k]);
                }
    
                for(k=first;k<=end;k++){
                    if(s[k].age>=ll&&s[k].age<=rr){
                        printf("%s %d %d
    ",s[k].name,s[k].age,s[k].worth);
                        add++;
                        if(add==size)break;
                    }
                }
                if(add==0)printf("None
    ");
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    函数的逻辑读成零
    SQL逻辑读变成零
    体系结构中共享池研究
    执行计划基础 动态采样
    执行计划基础 统计信息
    识别低效率的SQL语句
    oracle 知识
    XPATH 带命名空间数据的读取
    ACTIVITI 研究代码 之 模版模式
    ACTIVITI 源码研究之命令模式执行
  • 原文地址:https://www.cnblogs.com/huhuuu/p/3365944.html
Copyright © 2011-2022 走看看