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 - -
",i - 1 + 'A');
65             else
66                 printf("%c %d %d
", i - 1 + 'A' , f[i].time , f[i].id);
67     }
68     return 0;
69 }
View Code
原文地址:https://www.cnblogs.com/jeff-wgc/p/4456485.html