• 算法笔记刷题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;
    }
  • 相关阅读:
    Ts基础
    SWF 文件不能本地访问 只有仅限于文件系统的 SWF 文件
    laya的UI编辑器
    目前支持WebGL的浏览器有哪些?
    Laya学习
    egret学习
    PHP 获取上月,本月,近15天,近30天日期
    深入浅出:MySQL的左连接、右连接、内连接
    div中 li宽度不固定 ie6和ie7不兼容不自动换行
    8款给力HTML5/CSS3应用插件 可爱的HTML5笑脸
  • 原文地址:https://www.cnblogs.com/yiyefuyou/p/12457065.html
Copyright © 2020-2023  润新知