nkoj 2234

//因为只有六道题目,所以可以用一个数组表示六道题是否是第一次被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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值