思路:根据每门课程优先级高低进行排序,平均分直接计入rank,剩下的记为nowrank,如果排序结果的排名要比之前一个要高则进行替换.
有更简单的办法,方法还是略复杂而且因为思路略为混乱总是有2个小样例过不去,还好最后过了
代码:
#include<iostream>
#include<string>
#include<algorithm>
#include<string.h>
using namespace std;
#define MAX 2005
struct Bank {
string number;
int C, E, M,A;
int rank;
int nowrank;
char n;
}a[2005];
bool cmp1(Bank a, Bank b) {
return a.A > b.A;
}
bool cmp2(Bank a, Bank b) {
return a.C > b.C;
}
bool cmp3(Bank a, Bank b) {
return a.M > b.M;
}
bool cmp4(Bank a, Bank b) {
return a.E > b.E;
}
int main() {
int N, M,i;
string num;
int j;
scanf("%d %d", &N, &M);
for ( i = 0; i < N; i++) {
cin >> a[i].number >> a[i].C >> a[i].M >> a[i].E;
a[i].A = a[i].C + a[i].E + a[i].M;
}
sort(a, a + N, cmp1);
a[0].rank = 0;
a[0].n = 'A';
for ( i = 1; i < N; i++) {
if (a[i].A == a[i - 1].A) {
a[i].rank = a[i - 1].rank;
a[i].n = 'A';
}
else {
a[i].rank = i;
a[i].n = 'A';
}
}
sort(a, a + N, cmp2);
if (a[0].rank > 0) {
a[0].rank = 0;
a[0].n = 'C';
}
for (i = 0; i < N; i++)
a[i].nowrank = 0;
for ( i = 1; i < N; i++) {
if (a[i].C==a[i-1].C) {
a[i].nowrank = a[i - 1].nowrank;
}
else {
a[i].nowrank = i;
}
}
for (i = 1; i < N; i++) {
if (a[i].nowrank < a[i].rank) {
a[i].rank = a[i].nowrank;
a[i].n = 'C';
}
}
sort(a, a + N, cmp3);
for (i = 0; i < N; i++)
a[i].nowrank = 0;
if (a[0].rank > 0) {
a[0].rank = 0;
a[0].n = 'M';
}
a[0].nowrank = 0;
for ( i = 1; i < N; i++) {
if (a[i].M == a[i - 1].M) {
a[i].nowrank = a[i - 1].nowrank;
}
else {
a[i].nowrank = i;
}
}
for (i = 1; i < N; i++) {
if (a[i].nowrank < a[i].rank) {
a[i].rank = a[i].nowrank;
a[i].n = 'M';
}
}
sort(a, a + N, cmp4);
if (a[0].rank > 0) {
a[0].rank = 0;
a[0].n = 'E';
}
for (i = 0; i < N; i++)
a[i].nowrank = 0;
for (i = 1; i < N; i++) {
if (a[i].E == a[i - 1].E) {
a[i].nowrank = a[i - 1].nowrank;
}
else {
a[i].nowrank = i;
}
}
for (i = 1; i < N; i++) {
if (a[i].nowrank < a[i].rank) {
a[i].rank = a[i].nowrank;
a[i].n = 'E';
}
}
for (i = 0; i < M; i++){
cin >> num;
for ( j = 0; j < N; j++) {
if (a[j].number == num) {
printf("%d %c\n", a[j].rank+1, a[j].n);
break;
}
}
if (j == N) {
printf("N/A\n");
}
}
return 0;
}