csu oj 1339: 最后一滴血

http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1339

1339: 最后一滴血

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 319  Solved: 142
[ Submit][ Status][ Web Board]

Description

在ACM/ICPC这样的程序设计竞赛中,最早解出一道题称为抢到FB(First Blood,第一滴血)。现在ACM/ICPC世界总决赛甚至为每道题的FB设立了特别奖。

也许我们还可以设一个LB(Last Blood,最后一滴血)奖,奖给最后一个解出某题的队伍。注意:你不能先提交程序,得到Yes之后等比赛快结束时把它再交一遍,因为一旦一只队伍解出了某题,它对该题的所有后续提交都会被忽略。所有有本事的话,应该是写完程序以后先不交,等到比赛快结束时才交。当然,这样做浪费了很多罚时并且还有WA的风险,所以LB奖才显得有趣。

输入一场比赛中所有提交和对应的结果,输出每道题的LB奖得主。

 

 

Input

输入仅包含一组数据。第一行为题数n、队伍数t和提交数m(5<=n<=12, 10<=t<=100, 1<=m<=1000)。以下m行每行包含time(0~300之间的整数,单位:分钟), teamID(1~t), problem(A~L)和结果(Yes或者No)。提交按照时间从小到大排序,所以即使两个提交的time相同,也有先后顺序(可能只差几秒钟)。任意两个提交的时间都不会完全相同,因此LB奖要么空缺,要么有惟一的得主。

 

Output

对于每组数据,输出每道题目的LB奖得主的提交时间和teamID,格式见样例。

 

Sample Input

5 10 18

0 2 B No

11 2 B Yes

20 3 A Yes

35 8 E No

40 8 E No

45 7 E No

50 10 A Yes

100 4 A No

120 6 B Yes

160 2 E Yes

180 2 A Yes

210 3 B Yes

240 10 B No

250 10 B Yes

270 2 B Yes

295 8 E Yes

295 7 E Yes

299 10 D Yes

Sample Output

A 180 2

B 250 10

C - -

D 299 10

E 295 7

HINT

 

 

分析:

 

用一个数组结构体存储做对该题目的队伍的ID和时间,然后比较找出最后一个提交的队伍和时间。

 

AC代码:

 

 1 #include <stdio.h>

 2 #include <algorithm>

 3 #include <iostream>

 4 #include <string.h>

 5 #include <string>

 6 #include <math.h>

 7 #include <stdlib.h>

 8 #include <queue>

 9 #include <stack>

10 #include <set>

11 #include <map>

12 #include <list>

13 #include <iomanip>

14 #include <vector>

15 #pragma comment(linker, "/STACK:1024000000,1024000000")

16 #pragma warning(disable:4786)

17 

18 using namespace std;

19 

20 const int INF = 0x3f3f3f3f;

21 const int MAX = 1000 + 10;

22 const double eps = 1e-8;

23 const double PI = acos(-1.0);

24 

25 struct T

26 {

27     int time , id;

28     char a , s[5];

29 }p[1001];

30 

31 struct T1

32 {

33     int time , id;

34 }f[15];

35 

36 int main()

37 {

38     int n , t , m , i , l , ll , maxn = 0 , ff[105][15];

39     scanf("%d %d %d",&n , &t , &m);

40     memset(ff , 0 , sizeof(ff));

41     for(i = 1;i <= n;i ++)

42         f[i].time = -1;

43     for(i = 0;i < m;i ++)

44     {

45         scanf("%d %d %c %s",&p[i].time , &p[i].id , &p[i].a , p[i].s);

46         l = p[i].a - 'A' + 1;

47         ll = p[i].id;

48         if(l > maxn)

49             maxn = l;

50         if(strcmp(p[i].s , "Yes") == 0)

51         {

52             ff[ll][l] ++;

53             if(ff[ll][l] == 1 && p[i].time >= f[l].time)

54             {

55                 f[l].time = p[i].time;

56                 f[l].id = p[i].id;

57             }

58             ff[ll][l] ++;

59         }

60     }

61     for(i = 1;i <= maxn;i ++)

62     {

63             if(f[i].time == -1)

64                 printf("%c - -\n",i - 1 + 'A');

65             else

66                 printf("%c %d %d\n", i - 1 + 'A' , f[i].time , f[i].id);

67     }

68     return 0;

69 }
View Code

 

你可能感兴趣的:(OJ)