HDU 排名(简单题)
好久没在oj上做题了,刚开始第二天做一道简单题的心得记录。
1 #include <cstdio> 2 #include <cstring> 3 #include <string> 4 #include <iostream> 5 #include <algorithm> 6 using namespace std; 7 8 /* 9 超级无语的错误,#define定义的长度不够导致wrong answer 10 很久之前做oj题的时候也出现过这种情况, 11 原因: 12 很久没做了,而且感觉范围卡的好像刚刚好,谁料...... 13 14 以后不会在自作聪明去卡边界值了,还是老老实实的多申请出一些空间,害的自己多花了半多小时找错误...... 15 16 另外还有一点,之前用string id定义的结构体成员,在输入时出现错误,而且在写cmp函数时,当成string类型直接进行比较了, 17 忘记改了,这里也卡了一会...... 18 */ 19 20 #define STU_MAX 1010 21 #define QUE_MAX 15 22 #define ID_MAX 25 23 24 struct Stu 25 { 26 char id[ID_MAX]; 27 int num; 28 int s[QUE_MAX]; 29 int sum; 30 }stu[STU_MAX]; 31 32 bool cmp(Stu a, Stu b) 33 { 34 if (a.sum == b.sum) 35 return strcmp(a.id, b.id) < 0; 36 else 37 return a.sum > b.sum; 38 } 39 40 int main(void) 41 { 42 int n, m, g; 43 int score[QUE_MAX]; 44 while (scanf("%d", &n) && n) 45 { 46 scanf("%d %d", &m, &g); 47 memset(stu, 0, sizeof(stu)); 48 memset(score, 0, sizeof(score)); 49 for (int i = 0; i < m; i++) 50 { 51 scanf("%d", &score[i]); 52 } 53 int count_stu = 0; 54 for (int i = 0; i < n; i++) 55 { 56 scanf("%s %d", stu[i].id ,&stu[i].num); 57 58 for (int j = 0; j < stu[i].num; j++) 59 { 60 scanf("%d", &stu[i].s[j]); 61 stu[i].sum += score[stu[i].s[j] - 1]; 62 } 63 if (stu[i].sum >= g) 64 { 65 count_stu++; 66 } 67 } 68 sort(stu, stu + n, cmp); 69 printf("%d\n", count_stu); 70 for (int i = 0; i <count_stu; i++) 71 { 72 printf("%s %d\n", stu[i].id, stu[i].sum); 73 } 74 } 75 return 0; 76 }