• PAT:1025. PAT Ranking (25) AC


    #include<stdio.h>
    #include<string.h>          //【warning】刚开始少了这个头文件,但是VS2010中被系统自动优化没有察觉 #include<algorithm> using namespace std; struct Student { char ID[15]; int score,final_rank,location_number,local_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,I=0; //I记录所有STU学生个数 scanf("%d",&n); for(int t=1 ; t<=n ; ++t) //n个考场 { int k; scanf("%d",&k); for(int i=0 ; i<k ; ++i) { scanf("%s %d",&STU[I+i].ID, &STU[I+i].score); //记录ID,分数 STU[I+i].location_number=t; //记录考场号 } sort(STU+I,STU+I+k,cmp); STU[I].local_rank=1; for(int i=1 ; i<k ; ++i) //记录场内排名 { if(STU[I+i].score==STU[I+i-1].score) STU[I+i].local_rank=STU[I+i-1].local_rank; //和前一个同学名次相同 else STU[I+i].local_rank=i+1; //否则排名为i+1 } I+=k; //到下一个考场,I从k个考生之后开始算 } sort(STU,STU+I,cmp); STU[0].final_rank=1; for(int i=1 ; i<I ; ++i) //总排名 { if(STU[i].score==STU[i-1].score) STU[i].final_rank=STU[i-1].final_rank; //和前一个同学名次相同 else STU[i].final_rank=i+1; //否则排名为i+1 } printf("%d ",I); for(int i=0 ; i<I ; ++i) printf("%s %d %d %d ",STU[i].ID,STU[i].final_rank,STU[i].location_number,STU[i].local_rank); return 0; }
  • 相关阅读:
    C/C++字符串转换函数;
    MFC CTreeCtrl 递归遍历算法
    汉字转拼音
    Windows之权限讲解
    Ubuntu 保存文件时报E212
    ON_WM_MOUSEWHEEL无响应
    sln、db、opendb、vcxproj、filters、user文件跟踪说明
    iOS 9: UIStackView入门
    Swift语言Storyboard教程:第一部分
    springboot启动项目报错:ERROR:o.s.b.d.LoggingFailureAnalysisReporter解决办法
  • 原文地址:https://www.cnblogs.com/Evence/p/4306983.html
Copyright © 2020-2023  润新知