//因为只有六道题目,所以可以用一个数组表示六道题是否是第一次被AC
//对于每个选手,有一个结构体表示六道题中答对的题目,和是否是第一次Ac
//的信息
#include<iostream>
#include<string>
#include<string.h>
#include<cmath>
#include<map>
#define max_q 6
using namespace std;
bool Q_ACed[max_q];
int n, m;
//用一个全局变量来记录现在的时间,从第一个AC的人开始算起
//每检测到一个AC的选手,加上相应的消耗时间后看看是不是超过了
//这个选手提交时间+10min,如果是的话,就叫醒这个做梦的人,否则让他继续
int Time = 0;
//int这个人解决到的题目是一个字符串 ABC表示解决了题目ABC
map<int,string> Aced;
int to(string s){
int ans = 0;
int l = s.size() - 1;
for (int i = 0; i < s.size(); i++){
ans += (s[i] - '0')*pow(10, l - i);
}
return ans;
}
//把一个string的时间变成int的时间的函数,秒
int toint(string s){
int ans = 0;
string r = "";
r += s[0];
r += s[1];
ans += to(r)*3600;
r = "";
r += s[3];
r += s[4];
ans += to(r)*60;
r = "";
r += s[6];
r += s[7];
ans += to(r);
return ans;
}
int main()
{
memset(Q_ACed, 0, sizeof(Q_ACed));
int x;
char p;
string t;
string r;
cin >> n >> m;
//从第一个得到AC的人开始计时
for (int i = 0; i < m; i++){
//对每一条处理,读入一条处理一条
cin >> x >> p >> t >> r;
//首先检测是不是对了
if (r == "AC"){
Time += 60;
//判断这个人是不是重复提交一道题目
if (Aced[x].find(p)!=string::npos){
//说明这个人已经做过这道题目了,是重复提交的
Time -= 60;
continue;
//不再处理这道题目
}
//如果AC了的话,就判断这道题是不是第一次被AC
if (Q_ACed[p - 'A'] == 0){
//说明是第一次被AC
Q_ACed[p - 'A'] = 1;
Time += 30;
if (Aced[x].find(p)==string::npos){
//说明是第一次
Aced[x] += p;
continue;
}
}
else{
//这道题目不是第一次AC,那么就看是不是这个人第一次AC
if (Aced[x].find(p)==string::npos){
//说明是第一次
Aced[x] += p;
Time += 30;
}
}
}
if (Time - toint(t) > 600){
cout << "Wake him up!" << endl;
return 0;
}
if (Time - toint(t) <= 0){
Time = toint(t);
}
}
cout << "Leave him alone~" << endl;
return 0;
}
nkoj 2234
最新推荐文章于 2024-09-29 18:51:32 发布