程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU1236:排名

HDU1236:排名

編輯:C++入門知識

Problem Description 今天的上機考試雖然有實時的Ranklist,但上面的排名只是根據完成的題數排序,沒有考慮  每題的分值,所以並不是最後的排名。給定錄取分數線,請你寫程序找出最後通過分數線的  考生,並將他們的成績按降序打印。      Input 測試輸入包含若干場考試的信息。每場考試信息的第1行給出考生人數N ( 0 < N  < 1000 )、考題數M ( 0 < M < = 10 )、分數線(正整數)G;第2行排序給出第1題至第M題的正整數分值;以下N行,每行給出一  名考生的准考證號(長度不超過20的字符串)、該生解決的題目總數m、以及這m道題的題號  (題目號由1到M)。  當讀入的考生人數為0時,輸入結束,該場考試不予處理。      Output 對每場考試,首先在第1行輸出不低於分數線的考生人數n,隨後n行按分數從高  到低輸出上線考生的考號與分數,其間用1空格分隔。若有多名考生分數相同,則按他們考  號的升序輸出。      Sample Input 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     Sample Output 3 CS003 60 CS001 37 CS004 37 0 1 CS000000000000000002 20   Hint   Huge input, scanf is recommended.           [cpp]  #include <iostream>   #include <cstdio>   #include <cstring>   #include <algorithm>   using namespace std;   #define N 1005   int que[15];      struct node   {       char name[25];       int num;       int sum;   } stu[N];      bool cmp(const node &a,const node &b)   {       if(a.sum == b.sum)           return strcmp(a.name,b.name) < 0 ? 1 : 0;       else           return a.sum > b.sum;   }      int main()   {       int stu_num,text_num,line,a,cnt;          while(scanf("%d",&stu_num)!=EOF && stu_num)       {           cnt = 0;           int i;           scanf("%d%d",&text_num,&line);           for(i = 1; i<=text_num; i++)               scanf("%d",&que[i]);           for(i = 1; i<=stu_num; i++)           {               stu[i].sum = 0;               scanf("%s%d",stu[i].name,&stu[i].num);               while(stu[i].num--)               {                   scanf("%d",&a);                   stu[i].sum+=que[a];               }               if(stu[i].sum>=line)                   cnt++;           }           sort(stu+1,stu+1+stu_num,cmp);           cout << cnt << endl;           for(i = 1; i<=stu_num; i++)           {               if(stu[i].sum >=line)                   printf("%s %d\n",stu[i].name,stu[i].sum);               else                   break;           }       }       return 0;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved