L2-3 名人堂与代金券 (25 分)

发布时间:2019年03月23日 阅读:302 次

L2-3 名人堂与代金券 (25 分)

对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,总评成绩必须达到 60 分及以上,并且有另加福利:总评分在 [G, 100] 区间内者,可以得到 50 元 PAT 代金券;在 [60, G) 区间内者,可以得到 20 元PAT代金券。全国考点通用,一年有效。同时任课老师还会把总评成绩前 K 名的学生列入课程“名人堂”。本题就请你编写程序,帮助老师列出名人堂的学生,并统计一共发出了面值多少元的 PAT 代金券。

输入格式:

输入在第一行给出 3 个整数,分别是 N(不超过 10 000 的正整数,为学生总数)、G(在 (60,100) 区间内的整数,为题面中描述的代金券等级分界线)、K(不超过 100 且不超过 N 的正整数,为进入名人堂的最低名次)。接下来 N 行,每行给出一位学生的账号(长度不超过15位、不带空格的字符串)和总评成绩(区间 [0, 100] 内的整数),其间以空格分隔。题目保证没有重复的账号。

输出格式:

首先在一行中输出发出的 PAT 代金券的总面值。然后按总评成绩非升序输出进入名人堂的学生的名次、账号和成绩,其间以 1 个空格分隔。需要注意的是:成绩相同的学生享有并列的排名,排名并列时,按账号的字母序升序输出。

输入样例:

  1. 10 80 5
  2. cy@zju.edu.cn 78
  3. cy@pat-edu.com 87
  4. 1001@qq.com 65
  5. uh-oh@163.com 96
  6. test@126.com 39
  7. anyone@qq.com 87
  8. zoe@mit.edu 80
  9. jack@ucla.edu 88
  10. bob@cmu.edu 80
  11. ken@163.com 70

输出样例:

  1. 360
  2. 1 uh-oh@163.com 96
  3. 2 jack@ucla.edu 88
  4. 3 anyone@qq.com 87
  5. 3 cy@pat-edu.com 87
  6. 5 bob@cmu.edu 80
  7. 5 zoe@mit.edu 80
C++
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. struct node{
  4. string a;
  5. int sc;
  6. int ran;
  7. }b[10002];
  8. int cmp(node a,node b){
  9. if(a.sc!=b.sc)return a.sc>b.sc;
  10. else return a.a<b.a;
  11. }
  12. int main(){
  13. int n,g,k;
  14. cin>>n>>g>>k;
  15. int sum =0;
  16. for(int i=1;i<=n;i++){
  17. cin>>b[i].a>>b[i].sc;
  18. if(b[i].sc>=g&&b[i].sc<=100)sum+=50;
  19. if(b[i].sc>=60&&b[i].sc<g)sum+=20;
  20. }
  21. sort(b+1,b+1+n,cmp);
  22. int pre = 1;
  23. b[1].ran = 1;
  24. int M = b[1].sc;
  25. for(int i=2;i<=n;i++){
  26. if(b[i].sc==M){
  27. b[i].ran = pre;
  28. }
  29. else{
  30. pre = i;
  31. b[i].ran = pre;
  32. M = b[i].sc;
  33. }
  34. }
  35. cout<<sum<<endl;
  36. for(int i=1;i<=n;i++){
  37. if(b[i].ran<=k){
  38. cout<<b[i].ran<<" "<<b[i].a<<" "<<b[i].sc<<endl;
  39. }
  40. else break;
  41. }
  42. return 0;
  43. }


Tag:
相关文章

发表评论: