zoukankan      html  css  js  c++  java
  • 算法笔记刷题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;
    }
  • 相关阅读:
    【转】Skynet之消息队列
    [转]Skynet之斗转星移
    [转]skynet Lua中的协程
    win7 + nginx + php
    LexAndYacc 安装程序
    ubuntu + samba 共享失败
    [转]TDD之Dummy Stub Fake Mock
    【转】 纯技术帖:MMOG网络同步算法揭秘
    [转]帧锁定同步算法
    [转]游戏中的同步
  • 原文地址:https://www.cnblogs.com/yiyefuyou/p/12457065.html
Copyright © 2011-2022 走看看