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 }

 

posted @ 2018-07-17 00:49  Feng_Change  阅读(429)  评论(0编辑  收藏  举报