http://ac.jobdu.com/problem.php?pid=1014

来源:互联网 发布:查士丁尼瘟疫 知乎 编辑:程序博客网 时间:2024/05/01 12:51
题目描述:
    今天的上机考试虽然有实时的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 2510 10 12 13 15CS004 3 5 1 3CS003 5 2 4 1 3 5CS002 2 1 2CS001 3 2 3 51 2 4010 30CS001 1 22 3 2010 10 10CS000000000000000001 0CS000000000000000002 2 1 20
样例输出:
3CS003 60CS001 37CS004 3701CS000000000000000002 20

[cpp] view plaincopy
  1. #include<iostream>  
  2. #include<cstdio>  
  3. #include<memory.h>  
  4. #include<algorithm>  
  5. #include<cstring>  
  6. #include<cstdlib>  
  7. using namespace std;  
  8. struct Node{  
  9.     char s[21];  
  10.     int grade;  
  11.     bool operator < (const Node & node)const{  
  12.         if(grade!=node.grade)  
  13.             return grade > node.grade;  
  14.         return strcmp(s, node.s) < 0;  
  15.     }  
  16. };  
  17. Node nodes[1001];  
  18. int grade[11];  
  19. int main(){  
  20.     //freopen("in.txt", "r", stdin);  
  21.   
  22.     int n, m, g, k, t, sum;  
  23.     while(cin>>n, n){  
  24.         cin>>m>>g;  
  25.   
  26.         for(int i=1;i<=m;++i){  
  27.             scanf("%d", grade+i);  
  28.         }  
  29.   
  30.         for(int i=0;i<n;++i){  
  31.             cin>>nodes[i].s;  
  32.             cin>>k;  
  33.             sum = 0;  
  34.             for(int j=0;j<k;++j){  
  35.                 scanf("%d", &t);  
  36.                 sum += grade[t];  
  37.             }  
  38.             nodes[i].grade = sum;  
  39.         }  
  40.         sort(nodes, nodes+n);  
  41.         int i;  
  42.         for(i=0;i<n;++i){  
  43.             if(nodes[i].grade < g){  
  44.                 break;  
  45.             }  
  46.         }  
  47.         printf("%d\n", i);  
  48.         for(int j=0;j<i;++j){  
  49.             printf("%s %d\n", nodes[j].s, nodes[j].grade);  
  50.         }  
  51.   
  52.     }  
  53.     //fclose(stdin);  
  54.     return 0;  
  55. }  
原创粉丝点击