| To evaluate the performance of our first year CS majored students, we consider their grades of three courses only: For example, The grades of Then the best ranks for all the students are No.1 since the 1st one has done the best in C Programming Language, while the 2nd one in Mathematics, the 3rd one in English, and the last one in average. Input Specification:Each input file contains one test case. Each case starts with a line containing 2 numbers N and M (≤2000), which are the total number of students, and the number of students who would check their ranks, respectively. Then N lines follow, each contains a student ID which is a string of 6 digits, followed by the three integer grades (in the range of [0, 100]) of that student in the order of Output Specification:For each of the M students, print in one line the best rank for him/her, and the symbol of the corresponding rank, separated by a space. The priorities of the ranking methods are ordered as If a student is not on the grading list, simply output |
- 5 6
- 310101 98 85 88
- 310102 70 95 88
- 310103 82 87 94
- 310104 91 91 91
- 310105 85 90 90
- 310101
- 310102
- 310103
- 310104
- 310105
- 999999
- 1 C
- 1 M
- 1 E
- 1 A
- 3 A
- N/A
题目大意
给你N个学生成绩的信息,求每个学生在所有学生当中,最好的排名是哪门成绩(或者平均成绩最好),如果排名有相同的情况,要按照指定的要求输出
思路
笨办法,对四种排名排序四次,并用map记录
- #include
- using namespace std;
- struct Student{
- int id,c,m,e,avg;
- }s;
-
- void OP(int n, map<int,int>& p);
- void print(int id);
- map<int,int> apr,C,M,E,A;
- vector
box; - int main()
- {
- int N,K;
- cin >> N >> K;
- for(int z=0;z
- cin >> s.id >> s.c >> s.m >> s.e;
- apr[s.id] = 1;
- s.avg = (s.c + s.m + s.e)/3;
- box.push_back(s);
- }
-
- OP(1,C);
- OP(2,M);
- OP(3,E);
- OP(4,A);
-
- while (K--){
- cin >> N;
- if(apr[N]) print(N);
- else puts("N/A");
- }
-
- return 0;
- }
-
- void print(int id){
- char ch = 'A';
- int result = A[id];
- if(C[id]
'C'; - if(M[id]
'M'; - if(E[id]
'E'; - printf("%d %c\n",result,ch);
- }
-
- bool cmp1(Student x,Student y){ return x.c > y.c; }
- bool cmp2(Student x,Student y){ return x.m > y.m; }
- bool cmp3(Student x,Student y){ return x.e > y.e; }
- bool cmp4(Student x,Student y){ return x.avg > y.avg; }
- void OP(int n, map<int,int>& p){
- int score;
- switch (n) {
- case 1: sort(box.begin(),box.end(),cmp1);
- score=box.front().c;
- for(int z=0;z
size();){ - int op = 0;
- while (z+op
size() && box[z+op].c==score){ - p[box[z+op].id] = z+1;
- op++;
- }
- z += op ? op : 1;
- if(z
size()) score = box[z].c; - }
- break;
- case 2:sort(box.begin(),box.end(),cmp2);
- score=box.front().m;
- for(int z=0;z
size();){ - int op = 0;
- while (z+op
size() && box[z+op].m==score){ - p[box[z+op].id] = z+1;
- op++;
- }
- z += op ? op : 1;
- if(z
size()) score = box[z].m; - }
- break;
- case 3: sort(box.begin(),box.end(),cmp3);
- score=box.front().e;
- for(int z=0;z
size();){ - int op = 0;
- while (z+op
size() && box[z+op].e==score){ - p[box[z+op].id] = z+1;
- op++;
- }
- z += op ? op : 1;
- if(z
size()) score = box[z].e; - }
- break;
- case 4: sort(box.begin(),box.end(),cmp4);
- score=box.front().avg;
- for(int z=0;z
size();){ - int op = 0;
- while (z+op
size() && box[z+op].avg==score){ - p[box[z+op].id] = z+1;
- op++;
- }
- z += op ? op : 1;
- if(z
size()) score = box[z].avg; - }
- break;
- }
-
- }
