题目链接:http://www.patest.cn/contests/ds/7-07
编程能力测试(Programming Ability Test,简称PAT)是浙江大学计算机科学与技术学院主办的专业技术认证考试(网址http://pat.zju.edu.cn/)。每次考试会在若干个不同的考点同时举行,每个考点用局域网,产生本考点的成绩。考试结束后,各个考点的成绩将即刻汇总成一张总的排名表。现在就请你写一个程序自动归并各个考点的成绩并生成总排名表。
输入格式说明:
输入的第1行给出1个正整数N(<=100),代表考点总数。随后给出N个考点的成绩,格式为:首先1行给出正整数K(<=300),代表该考点的考生总数;随后K行,每行给出1个考生的信息,包括考号(由13位整数字组成)和得分(为[0,100]区间内的整数),中间用空格分隔。
输出格式说明:
首先在第1行里输出考生总数。随后输出汇总的排名表,每个考生的信息占一行,顺序为:考号、最终排名、考点编号、在该考点的排名。其中考点按输入给出的顺序从1到N编号。考生的输出须按最终排名的非递减顺序输出,获得相同分数的考生应有相同名次,并按考号的递增顺序输出。
样例输入与输出:
序号 | 输入 | 输出 |
1 |
2 5 1234567890001 95 1234567890005 100 1234567890003 95 1234567890002 77 1234567890004 85 4 1234567890013 65 1234567890011 25 1234567890014 100 1234567890012 85 |
9 1234567890005 1 1 1 1234567890014 1 2 1 1234567890001 3 1 2 1234567890003 3 1 2 1234567890004 5 1 4 1234567890012 5 2 2 1234567890002 7 1 5 1234567890013 8 2 3 1234567890011 9 2 4 |
2 |
4 10 4000000000011 100 4000000000008 90 4000000000005 100 4000000000001 90 4000000000003 95 4000000000009 80 4000000000006 90 4000000000007 100 4000000000002 90 4000000000004 90 6 3000000000003 75 3000000000013 85 3000000000007 86 3000000000009 92 3000000000010 98 3000000000020 60 2 2000000000002 98 2000000000003 98 1 1000000000001 100 |
19 1000000000001 1 4 1 4000000000005 1 1 1 4000000000007 1 1 1 4000000000011 1 1 1 2000000000002 5 3 1 2000000000003 5 3 1 3000000000010 5 2 1 4000000000003 8 1 4 3000000000009 9 2 2 4000000000001 10 1 5 4000000000002 10 1 5 4000000000004 10 1 5 4000000000006 10 1 5 4000000000008 10 1 5 3000000000007 15 2 3 3000000000013 16 2 4 4000000000009 17 1 10 3000000000003 18 2 5 3000000000020 19 2 6 |
3 |
1 1 9999999999999 0 |
1 9999999999999 1 1 1 |
PS:
就是一道结构体运用的果题!
代码如下:
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; const int maxn = 41700; struct ss { char num[17]; int s; int rank;//在当前考点的排名 int mark;//在几号考点 int flag;//总排名 }stu[maxn]; bool cmp1(ss a, ss b) { if(a.s == b.s) { return strcmp(a.num, b.num) < 0; } return a.s > b.s; } int main() { int N; int k[117]; int sum = 0; scanf("%d",&N); { int i, j; int l = 0, p = 0; for(i = 1; i <= N; i++) { scanf("%d",&k[i]); sum += k[i]; int tt = l; for(j = 1; j <= k[i]; j++) { scanf("%s%d",stu[l].num,&stu[l].s); stu[l].mark = i; l++; } sort(stu+tt,stu+l,cmp1); p = 2; stu[tt].rank = 1; for(int h = tt+1; h < l; h++) { if(stu[h-1].s == stu[h].s) { stu[h].rank = stu[h-1].rank; } else { stu[h].rank = p; } p++; } } sort(stu,stu+l,cmp1); int f = 1; int flag = 0; printf("%d\n",sum); stu[0].flag = 1; printf("%s %d %d %d\n",stu[0].num,stu[0].flag,stu[0].mark,stu[0].rank); p = 2; for(int h = 1; h < l; h++) { if(stu[h-1].s == stu[h].s) { stu[h].flag = stu[h-1].flag; } else { stu[h].flag = p; } p++; } for(i = 1; i < l; i++) { printf("%s %d ",stu[i].num,stu[i].flag); printf("%d %d\n",stu[i].mark,stu[i].rank); } } return 0; }
时间: 2024-10-08 20:22:09