有n个考场,每个考场都有若干数量个考生,现给出各个考场中考生的准考证号和分数,要求将所有考生的分数从高到低排序,并输出
#include<iostream> #include<string.h> #include<algorithm> //#include<map> using namespace std; struct Student { char id[15]; //准考证号 int score; //分数 int location_number; //考场号 int location_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; cin>>n;//n为考场数 for(int i=0;i<n;i++) { cin>>k; for(int j=0;j<k;j++) { cin>>stu[num].id>>stu[num].score; stu[num].location_number=i; num++; } sort(stu + num-k,stu+num,cmp); stu[num-k].location_rank=1; //对于考场的第一名rank记为1 for(int j = num-k+1;j<num;j++) { if(stu[j].score==stu[j-1].score) { stu[j].location_rank=stu[j-1].location_rank; } else { stu[j].location_rank=j+1-(num-k); } } } cout<<num<<endl; 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; } cout<<stu[i].id; cout<<r<<stu[i].location_number<<stu[i].location_rank<<endl; } return 0; } /* 输入样例: 2 5 1234567890001 95 1234567890005 100 1234567890003 95 1234567890002 77 1234567890004 85 4 1234567890013 65 1234567890011 25 1234567890014 100 1234567890012 85 */
原文地址:https://www.cnblogs.com/chuxinbubian/p/11581804.html
时间: 2024-11-07 06:58:07