PAT 1012. The Best Rank (25)
http://www.patest.cn/contests/pat-a-practise/1012
这题比较坑啊, 没说明白如果成绩相同怎么排序, 例如 1 2 2 3 那3是排第三还是排第四? 两个2怎么排, 两个第二, 没有第三, 3排第四
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 5 #define MAXN 2010 6 #define INF 10000000; 7 int n, m; 8 int id[MAXN]; 9 int C[MAXN], M[MAXN], E[MAXN], A[MAXN]; 10 int sortedC[102], sortedM[102], sortedE[102], sortedA[102]; 11 int hash[1000010]; 12 int main() { 13 memset(hash, -1, sizeof(hash)); 14 memset(sortedC, 0, sizeof(sortedC)); 15 memset(sortedM, 0, sizeof(sortedM)); 16 memset(sortedE, 0, sizeof(sortedE)); 17 memset(sortedA, 0, sizeof(sortedA)); 18 scanf("%d%d", &n, &m); 19 for (int i = 0; i < n; ++i) { 20 scanf("%d %d %d %d", &id[i], &C[i], &M[i], &E[i]); 21 hash[id[i]] = i; 22 sortedC[C[i]]++; 23 sortedM[M[i]]++; 24 sortedE[E[i]]++; 25 A[i] = (C[i] + M[i] + E[i]) / 3; 26 sortedA[A[i]]++; 27 } 28 for (int i = 99; i >= 0; --i) { 29 sortedC[i] += sortedC[i + 1]; 30 sortedM[i] += sortedM[i + 1]; 31 sortedE[i] += sortedE[i + 1]; 32 sortedA[i] += sortedA[i + 1]; 33 } 34 for (int i = 0; i < m; ++i) { 35 int id_toquery; 36 scanf("%d", &id_toquery); 37 if (-1 == hash[id_toquery]) { 38 puts("N/A"); 39 continue; 40 } 41 int rank = sortedA[A[hash[id_toquery]] + 1] + 1; 42 char subj = 'A'; 43 if (rank > sortedC[C[hash[id_toquery]] + 1] + 1) { 44 rank = sortedC[C[hash[id_toquery]] + 1] + 1; 45 subj = 'C'; 46 } 47 if (rank > sortedM[M[hash[id_toquery]] + 1] + 1) { 48 rank = sortedM[M[hash[id_toquery]] + 1] + 1; 49 subj = 'M'; 50 } 51 if (rank > sortedE[E[hash[id_toquery]] + 1] + 1) { 52 rank = sortedE[E[hash[id_toquery]] + 1] + 1; 53 subj = 'E'; 54 } 55 printf("%d %c\n", rank, subj); 56 } 57 return 0; 58 }

浙公网安备 33010602011771号