PAT 1012

来源:互联网 发布:安卓5.1可用java模拟器 编辑:程序博客网 时间:2024/05/11 13:56

思路:根据每门课程优先级高低进行排序,平均分直接计入rank,剩下的记为nowrank,如果排序结果的排名要比之前一个要高则进行替换.

有更简单的办法,方法还是略复杂而且因为思路略为混乱总是有2个小样例过不去,还好最后过了

代码:

#include<iostream>#include<string>#include<algorithm>#include<string.h>using namespace std;#define MAX 2005struct 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;}

0 0