- 题目描述:
-
今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑每题的分值,所以并不是最后的排名。给定录取分数线,请你写程序找出最后通过分数线的考生,并将他们的成绩按降序打印。
- 输入:
-
测试输入包含若干场考试的信息。每场考试信息的第1行给出考生人数N ( 0 < N < 1000 )、考题数M ( 0 < M < = 10 )、分数线(正整数)G;第2行排序给出第1题至第M题的正整数分值;以下N行,每行给出一名考生的准考证号(长度不超过20的字符串)、该生解决的题目 总数m、以及这m道题的题号(题目号由1到M)。
当读入的考生人数为0时,输入结束,该场考试不予处理。
-
输出:
-
对每场考试,首先在第1行输出不低于分数线的考生人数n,随后n行按分数从高到低输出上线考生的考号与分数,其间用1空格分隔。若有多名考生分数相同,则按他们考号的升序输出。
-
样例输入:
-
4 5 25 10 10 12 13 15 CS004 3 5 1 3 CS003 5 2 4 1 3 5 CS002 2 1 2 CS001 3 2 3 5 1 2 40 10 30 CS001 1 2 2 3 20 10 10 10 CS000000000000000001 0 CS000000000000000002 2 1 2 0
- 样例输出:
-
3 CS003 60 CS001 37 CS004 37 0 1 CS000000000000000002 20
1 #include <cstdlib> 2 #include <cstdio> 3 #include <cmath> 4 #include <cstring> 5 #include <cctype> 6 7 #include <iostream> 8 #include <string> 9 #include <vector> 10 #include <list> 11 #include <deque> 12 #include <set> 13 #include <map> 14 #include <stack> 15 #include <queue> 16 #include <algorithm> 17 18 #define MAXN 100001 19 #define MAXD 99999999 20 using namespace std; 21 22 23 24 struct Re{ 25 string name; 26 int m; 27 28 int sc; 29 30 int a[14]; 31 }re[1000+8]; 32 33 34 35 36 37 bool cmp(Re x,Re y) 38 { 39 if(x.sc>y.sc) 40 return true; 41 else if(x.sc==y.sc) 42 { 43 if(x.name<y.name) 44 {return true;} 45 else 46 return false; 47 } 48 return false; 49 } 50 51 52 53 54 55 int main() 56 { 57 58 int n,m,g; 59 60 int i,j,k; 61 62 int a[100]; 63 64 65 66 67 68 while(scanf("%d",&n)!=EOF) 69 { 70 if(n==0) 71 break; 72 73 74 75 scanf("%d%d",&m,&g); 76 77 getchar(); 78 79 for(i=1;i<=m;i++) 80 { 81 82 83 scanf("%d",&a[i]); 84 85 } 86 87 getchar(); 88 89 90 char name[100]; 91 92 for(i=0;i<n;i++) 93 { 94 scanf("%s %d",name,&re[i].m); 95 96 re[i].name=name; 97 98 99 re[i].sc=0; 100 101 for(j=0;j<re[i].m;j++) 102 { 103 scanf("%d",&re[i].a[j]); 104 105 re[i].sc+=a[re[i].a[j]]; 106 107 } 108 109 110 getchar(); 111 } 112 113 114 115 sort(re,re+n,cmp); 116 117 118 int num=0; 119 120 for(i=0;i<n;i++) 121 { 122 if(re[i].sc>=g) 123 num++; 124 } 125 126 cout<<num<<endl; 127 128 for(i=0;i<n;i++) 129 { 130 if(re[i].sc>=g) 131 cout<<re[i].name<<' '<<re[i].sc<<endl; 132 } 133 134 } 135 136 137 138 139 140 141 142 143 144 return 0; 145 }