排名
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8326 Accepted Submission(s): 3111
每題的分值,所以並不是最後的排名。給定錄取分數線,請你寫程序找出最後通過分數線的
考生,並將他們的成績按降序打印。
< 1000 )、考題數M ( 0 < M < = 10 )、分數線(正整數)G;第2行排序給出第1題至第M題的正整數分值;以下N行,每行給出一
名考生的准考證號(長度不超過20的字符串)、該生解決的題目總數m、以及這m道題的題號
(題目號由1到M)。
當讀入的考生人數爲0時,輸入結束,該場考試不予處理。
到低輸出上線考生的考號與分數,其間用1空格分隔。若有多名考生分數相同,則按他們考
號的升序輸出。
#include<stdio.h>
#include<string.h>
typedef struct Node{
char num[24];
int score;
}Node;
int compare(const void *a,const void *b){
if((*(Node*)a).score!=(*(Node*)b).score){
return (*(Node*)b).score-(*(Node*)a).score;
}
else{
return strcmp((*(Node*)a).num,(*(Node*)b).num);
}
}
int main(){
int n,m,g,s,t,sum,i,j,k;
int score[11];
Node pass[1000],temp;
while(scanf("%d",&n),n!=0){
scanf("%d%d",&m,&g);
for(i=0;i<m;i++){
scanf("%d",&score[i+1]);
}
k=0;
for(i=0;i<n;i++){
scanf("%s%d",&temp.num,&s);
sum=0;
for(j=0;j<s;j++){
scanf("%d",&t);
sum+=score[t];
}
if(sum>=g){
temp.score=sum;
pass[k]=temp;
k++;
}
}
qsort(pass,k,sizeof(pass[0]),compare);
printf("%d\n",k);
for(i=0;i<k;i++){
printf("%s %d\n",pass[i].num,pass[i].score);
}
}
return 0;
}