【牛客周赛 Round 56】E-约会故事
作者:
逝滅
,
2024-08-19 13:29:52
,
所有人可见
,
阅读 4
大模拟
字符串表示的时间,转为分钟记录,一天有1440分钟,所以可以数组存每一分钟是否是开心时间
可以用哈希表map存放,数据和状态bool
#include <iostream>
#include <cstring>
#include <map>
using namespace std;
const int N = 100010;
int n, m, k;
int happy[1500];// 存储一天中开心的时间,一天有1440分钟
//将字符串表示的时间点,转为分钟
int insert(string str)
{
int h = (str[0] - '0') * 10 + str[1] - '0';
int m = (str[3] - '0') * 10 + str[4] - '0';
return h * 60 + m;
}
int main()
{
scanf("%d%d", &n, &m);
//处理开心时间段
for (int i = 1; i <= n; i ++ )
{
string st, ed;
cin >> st >> ed;
int a = insert(st), b = insert(ed);//将时间转为分钟,存到数组中,然后利用差分和前缀和确认开心的时间段
if (a == b)// 开始时间和结束时间相同则一天都开心
happy[0] += 10000;// 全部时间都 + 10000
else if (a < b)
happy[a] += 1, happy[b + 1] -= 1;// a 到 b的时间段 + 1
else if (a > b)// 起始时间大于终止时间,要考虑第二天,所以可以看作两段:从起始时间到0点,从0点到终止时间
happy[a] += 1, happy[0] += 1, happy[b + 1] -= 1;
}
//前缀和得到开心时间段
for (int i = 1; i < 1500; i ++ ) happy[i] += happy[i - 1];
//处理奶茶
map<string, bool> milktea;// 用map存储奶茶
for (int i = 1; i <= m; i ++ )
{
string mt;
cin >> mt;
milktea[mt] = true;
}
//处理询问
scanf("%d", &k);
while (k -- )
{
string send_time;
string a1, a2;
string mt;
cin >> send_time;
cin >> a1 >> a2;
cin >> mt;
int c = insert(send_time);
if (!(c >= 0 && c <= 119 && happy[c]))
{
puts("Loser xqq");
continue;
}
int xt = insert(a1), ct = insert(a2);
if (xt <= ct && milktea[mt])
{
puts("Winner xqq");
}
else
{
puts("Joker xqq");
}
}
return 0;
}