Matter:
排名也会造成影响。期次在考场上的时候不要再去为了1,2分去浪费时间,跑出来成绩就可以了。
AC:(柳诺)
#include <cstdio>
#include <algorithm>
using namespace std;
struct node {
int id, best;
int score[4], rank[4];
}stu[2005];
int exist[1000000], flag = -1;
bool cmp1(node a, node b) {return a.score[flag] > b.score[flag];}
int main() {
int n, m, id;
scanf("%d %d", &n, &m);
for(int i = 0; i < n; i++) {
scanf("%d %d %d %d", &stu[i].id, &stu[i].score[1], &stu[i].score[2], &stu[i].score[3]);
stu[i].score[0] = (stu[i].score[1] + stu[i].score[2] + stu[i].score[3]) / 3.0 + 0.5;
}
for(flag = 0; flag <= 3; flag++) {
sort(stu, stu + n, cmp1);
stu[0].rank[flag] = 1;
for(int i = 1; i < n; i++) {
stu[i].rank[flag] = i + 1;
if(stu[i].score[flag] == stu[i-1].score[flag])
stu[i].rank[flag] = stu[i-1].rank[flag];
}
}
for(int i = 0; i < n; i++) {
exist[stu[i].id] = i + 1;
stu[i].best = 0;
int minn = stu[i].rank[0];
for(int j = 1; j <= 3; j++) {
if(stu[i].rank[j] < minn) {
minn = stu[i].rank[j];
stu[i].best = j;
}
}
}
char c[5] = {'A', 'C', 'M', 'E'};
for(int i = 0; i < m; i++) {
scanf("%d", &id);
int temp = exist[id];
if(temp) {
int best = stu[temp-1].best;
printf("%d %c\n", stu[temp-1].rank[best], c[best]);
} else {
printf("N/A\n");
}
}
return 0;
}
WA:
1.未注意到排名的变化。
2.未注意到平均分四舍五入的问题。
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct st{
int id , C , M , E , A;
}stu[2005];
struct gr{
int r;
char c;
}grade[4];
bool cmp(const st &a , const st &b){
return a.A > b.A;
}
bool cmp2(const st &a , const st &b){
return a.C > b.C;
}
bool cmp3(const st &a , const st &b){
return a.M > b.M;
}
bool cmp4(const st &a , const st &b){
return a.E > b.E;
}
bool cmp5(const gr &a , const gr &b){
return a.r < b.r;
}
bool cmp7(char a , char b){
return a < b;
}
int main(){
int n , m;
vector<st> suba , subc , subm , sube;
scanf("%d %d" , &n , &m);
//输入
for(int i = 0 ; i < n ; i ++){
scanf("%d %d %d %d" , &stu[i].id , &stu[i].C , &stu[i].M , &stu[i].E);
stu[i].A = stu[i].C + stu[i].M + stu[i].E;
suba.push_back(stu[i]);
subc.push_back(stu[i]);
subm.push_back(stu[i]);
sube.push_back(stu[i]);
}
//准备三个vector
sort(suba.begin() , suba.end() , cmp);
sort(subc.begin() , subc.end() , cmp2);
sort(subm.begin() , subm.end() , cmp3);
sort(sube.begin() , sube.end() , cmp4);
for(int i = 0 ; i < m ; i ++){
int idin;
bool flag = false;
scanf("%d" , &idin);
for(int j = 0 ; j < n ; j ++){
if(idin == suba[j].id){grade[0].r = j + 1 ; grade[0].c = 'A' ; flag = true;}
if(idin == subc[j].id){grade[1].r = j + 1; grade[1].c = 'C';}
if(idin == subm[j].id){grade[2].r = j + 1; grade[2].c = 'M';}
if(idin == sube[j].id){grade[3].r = j + 1; grade[3].c = 'E';}
}
if(flag == false){
cout << "N/A" << endl;
}
else{
sort(grade , grade + 4 , cmp5);
bool flag = true;
vector<char> v;
for(int j = 0 ; j < 3 ; j ++){
if(grade[0].r == grade[j].r && grade[j].c != 'E'){
v.push_back(grade[j].c);
flag = false;
}
}
if(flag == true){
printf("%d %c\n" , grade[0].r , grade[0].c);
}
else{
sort(v.begin() , v.end() , cmp7);
printf("%d %c\n" , grade[0].r , v[0]);
}
}
}
return 0;
}