1137 Final Grading
For a student taking the online course "Data Structures" on China University MOOC (http://www.icourse163.org/), to be qualified for a certificate, he/she must first obtain no less than 200 points from the online programming assignments, and then receive a final grade no less than 60 out of 100. The final grade is calculated by G=(Gmid−term×40%+Gfinal×60%) if Gmid−term>Gfinal, or Gfinal will be taken as the final grade G. Here Gmid−term and Gfinal are the student's scores of the mid-term and the final exams, respectively.
The problem is that different exams have different grading sheets. Your job is to write a program to merge all the grading sheets into one.
Each input file contains one test case. For each case, the first line gives three positive integers: P , the number of students having done the online programming assignments; M, the number of students on the mid-term list; and N, the number of students on the final exam list. All the numbers are no more than 10,000.
Then three blocks follow. The first block contains P online programming scores Gp's; the second one contains M mid-term scores Gmid−term's; and the last one contains N final exam scores Gfinal's. Each score occupies a line with the format: StudentID Score, where StudentID is a string of no more than 20 English letters and digits, and Score is a nonnegative integer (the maximum score of the online programming is 900, and that of the mid-term and final exams is 100).
For each case, print the list of students who are qualified for certificates. Each student occupies a line with the format:
StudentID Gp Gmid−term Gfinal G
If some score does not exist, output "−1" instead. The output must be sorted in descending order of their final grades (G must be rounded up to an integer). If there is a tie, output in ascending order of their StudentID's. It is guaranteed that the StudentID's are all distinct, and there is at least one qullified student.
- 6 6 7
- 01234 880
- a1903 199
- ydjh2 200
- wehu8 300
- dx86w 220
- missing 400
- ydhfu77 99
- wehu8 55
- ydjh2 98
- dx86w 88
- a1903 86
- 01234 39
- ydhfu77 88
- a1903 66
- 01234 58
- wehu8 84
- ydjh2 82
- missing 99
- dx86w 81
- missing 400 -1 99 99
- ydjh2 200 98 82 88
- dx86w 220 88 81 84
- wehu8 300 55 84 84
总结:这道题目本来不难的,但是做了很长的时间,用map标记合法的名字的序号,如果右面还有数据输入,直接使用d[string]的值找到对应数组的下标,方便很多
代码:
- #include
- #include
- #include
- #include
- using namespace std;
-
- struct node{
- string id;
- int gp,gm=-1,gf=-1,g=0;
- };
- bool cmp(node a,node b){
- if(a.g!=b.g) return a.g>b.g;
- return a.id
- }
- int main(){
- int p,m,n;
- scanf("%d%d%d",&p,&m,&n);
- vector
d(p+3) ;//这里为什么以p来定义d数组的大小呢,因为题目要求只有在编程分数合格的人才有资格排名 - map
int> t; -
- string s;
- int w,index=1;
- for(int i=0;i
- cin >> s >> w;
- if(w<200 || w>900) continue;
- t[s]=index++;
- d[t[s]].id=s;
- d[t[s]].gp=w;
- }
- for(int i=0;i
- cin >> s >> w;
- if(t[s]) d[t[s]].gm=w;
- }
- for(int i=0;i
- cin >> s >> w;
- if(t[s]){
- d[t[s]].gf=w;
- if(d[t[s]].gm>w) d[t[s]].g=0.6*w+0.4*d[t[s]].gm+0.5;
- else d[t[s]].g=w;
- }
- }
- sort(d.begin(),d.end(),cmp);
- for(int i=0;i
- if(d[i].g!=0 && d[i].g>=60){
- cout << d[i].id;
- printf(" %d %d %d %d\n",d[i].gp,d[i].gm,d[i].gf,d[i].g);
- }
- }
- return 0;
- }
好好学习,天天向上!
我要考研!
-
相关阅读:
【Linux 系统】gcc/g++使用零星整理
【Proteus仿真】Arduino UNO +74C922键盘解码驱动4X4矩阵键盘
【DDD】学习笔记-发布者—订阅者模式
【论文精读】Diffusion Transformer(DiT)
66页三级医院智慧医院 信息化建设规划
阿里云代理商:阿里云跨分部抵销前营收267.6亿元,跨分部抵销后营收207.57亿元,抵销后营收环比增长达17.37%。
elasticsearch高亮之highlight原理
Python txt文件转成xlsx文件
【Node.js】深度解析模块化的那些事
用html编写的简易新闻页面
-
原文地址:https://blog.csdn.net/weixin_50679551/article/details/127561379