CS000000000000000002 20
#include <stdio.h> #include <string.h> #define MAXN 1000 #define MAXM 11 typedef struct{ char id[21]; //准考证号 int sum;//总分 }EXAMINEE; EXAMINEE examinee[MAXN]; int score[MAXM]; void init(int n){ int i; for(i = 1;i <= n;++i){ examinee[i].sum = 0; } } int main(){ int N,M,G; int i,j,problem,m,cnt; int flag = 0; EXAMINEE tmp; while(scanf("%d%d%d",&N,&M,&G) && N){ init(N); for(i = 1;i <= M;++i){ scanf("%d",&score[i]); } for(i = 1;i <= N;++i){ scanf("%s%d",&examinee[i].id,&m); for(j = 1;j <= m;++j){//输入题号时就把总分计算出来 scanf("%d",&problem); examinee[i].sum = examinee[i].sum + score[problem]; } } j = 1; for(i = 1;i <= N;++i){ if(examinee[i].sum >= G) examinee[j++] = examinee[i]; } cnt = j - 1; if(cnt == 0){ printf("0\n"); continue; } for(i = 1;i <= cnt;++i){ for(j = 1;j < cnt - i + 1;++j){ if( (examinee[j].sum < examinee[j+1].sum) || ((examinee[j].sum == examinee[j+1].sum)&& (strcmp(examinee[j].id, examinee[j+1].id)>0)) ){ tmp = examinee[j]; examinee[j] = examinee[j+1]; examinee[j+1] = tmp; flag = 1; } } if(!flag) break; } printf("%d\n",cnt); for(i = 1;i <= cnt;++i){ printf("%s %d\n",examinee[i].id,examinee[i].sum); } } return 0; }