• 算法笔记刷题5(PAT A1025)


    第一次上手PAT的甲级题目,瑟瑟发抖(英语不好对着题目愣了半天)

    这一题的要点是使用sort函数。

    使用sort函数必须使用

    #include <algorithm>
    using namespace std;

    一开始我是准备在结构体内同时储存局部排名和总体排名的,但是书上的做法空间复杂度比我的好多了:

    只需要在结构体内存储局部排名,在最后输出时生成具体排名,而且还解决了困扰我的名次相同的问题。

    还是对sort函数不是非常熟悉,所以适应的时间长了点。

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    struct student{
        char id[15];//超过int的表示范围 
        int location;
        int score;
        int rank;
    }stu[30010]; 
    bool cmp(student a,student b){
        if(a.score!=b.score)return a.score>b.score;
        else return strcmp(a.id,b.id)<0;
    }
    int main(){
        int N,K,num=0;//考场数量,每个考场人数,考生总人数 
        scanf("%d",&N);
        for(int i=0;i<N;i++){
            scanf("%d",&K);
            for(int j=0;j<K;j++){
                scanf("%s %d",stu[num].id,&stu[num].score);
                stu[num].location=i;
                num++;    
            }
            sort(stu+num-K,stu+num,cmp);//对该考场的考生排序 
            stu[num-K].rank=1;
            for(int j=num-K+1;j<num;j++){
                if(stu[j].score==stu[j-1].score){
                    stu[j].rank=stu[j-1].rank;
                }else {
                    stu[j].rank=j+1-(num-K);
                }
            }
        } 
        printf("%d
    ",num);
        sort(stu,stu+num,cmp);
        int r=1;
        for(int i=0;i<num;i++){
            if(i>0&&stu[i].score!=stu[i-1].score){
                r=i+1;
            }
            printf("%s ",stu[i].id);
            printf("%d %d %d
    ",r,stu[i].location+1,stu[i].rank);
        } 
        return 0;
    }
  • 相关阅读:
    Day01-基础加强笔记
    CS Academy Round#2 E.Matrix Coloring
    AtCoder ABC198 F
    NERC2021 B. Button Lock
    AtCoder ARC115 E
    NOI Online 2021 Round 1 提高组 愤怒的小 N
    洛谷 P6918 [ICPC2016 WF]Branch Assignment
    AtCoder ARC076 F
    Atcoder ABC155 F
    POJ 1966 Cable TV Network
  • 原文地址:https://www.cnblogs.com/yiyefuyou/p/12457065.html
Copyright © 2020-2023  润新知