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
  • 相关阅读:
    GJM : Unity的profiler性能分析【转载】
    GJM :Unity UI 之 UGUI 开发
    GJM:笔记记录
    GJM : UGUI 缩放循环拖动展示卡牌效果
    GJM :HTC Vive VRTK.Package 踩坑之路(一)
    GJM :Mono 介绍
    GJM :Unity3D 介绍
    GJM : C# 介绍
    GJM : 通用类型系统(Common Type System CTS)
    GJM :SQL Server中常用的SQL语句
  • 原文地址:https://www.cnblogs.com/huhuuu/p/3365944.html
Copyright © 2011-2022 走看看