csu oj 1339: 最后一滴血
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1339
1339: 最后一滴血
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 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 }
悠游天地间 all rights reserved. © 2013 -- 1 << 64