1025. PAT Ranking (25)

来源:互联网 发布:spss mac 破解 编辑:程序博客网 时间:2024/05/16 17:03

点击打开链接

前面都过,最后一个不过



#include <cstdio>#include <algorithm>#include <string.h>using namespace std;struct s{char id[14];int grade;int group;int grorank;int finrank;}list[30010];bool cmpin(s a,s b){return a.grade>b.grade;};bool cmpfinal(s a,s b){if (a.grade!=b.grade){return a.grade>b.grade;}else{if(a.grorank!=b.grorank){return a.grorank>b.grorank;}else{return strcmp(a.id,b.id)<0;}}}int main(){freopen("in.txt","r",stdin);int n;scanf("%d",&n);int cnt=0;for(int j=1;j<=n;j++){int k;scanf("%d",&k);for(int i=0;i<k;i++){scanf("%s %d",&list[cnt].id,&list[cnt].grade);list[cnt].group=j;cnt++;list[cnt].finrank=-1;}sort(list+cnt-k,list+cnt,cmpin);int rank=1;list[cnt-k].grorank=1;for(int i=cnt-k+1;i<cnt;i++){rank++;if(list[i].grade!=list[i-1].grade){list[i].grorank=rank;}else{list[i].grorank=list[i-1].grorank;}}}sort(list,list+cnt,cmpfinal);list[0].finrank=1;printf("%d\n",cnt);printf("%s %d %d %d\n",list[0].id,list[0].finrank,list[0].group,list[0].grorank);for(int i=1;i<cnt;i++){if(list[i].grade!=list[i-1].grade){list[i].finrank=i+1;}else{list[i].finrank=list[i-1].finrank;}printf("%s %d %d %d\n",list[i].id,list[i].finrank,list[i].group,list[i].grorank);}return 0;}


0 0
原创粉丝点击