思路
在生活中,我们经常熬到下半夜然后发现,在 $11:59$ 之后,居然是 $00:00$!
于是我们把输入的小时转换成 $00 \sim 11$ 之间的数,然后我们看到样例。观察两个时间之间的大小关系。
11:30 > 00:20 Yes
00:20 < 05:00 No
11:45 > 01:04 Yes
00:10 < 00:59 No
01:09 < 08:01 No
00:00 < 01:00 No
00:00 = 00:00 No
发现规律:前一个时间比后一个大的,就可以,否则不行。
那这是为什么呢?
只有从上午跨到下午时,时间才会看起来往前走了。所以我们可以通过看在时间从 $11:59$ 变成 $00:00$ 的时刻,日期有没有变化来判断现在是上午还是下午。
注意,观测的时间跨度不会超过一天。
代码
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <string>
#include <cstring>
#include <cctype>
#include <cmath>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <map>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int inf = 0x3f3f3f3f;
#define elif else if
#define il inline
struct tim
{
int h, m;
void read()
{
scanf("%d:%d", &h, &m);
if (h == 12)
h = 0;
}
};
bool operator<(tim x, tim y)
{
if (x.h != y.h)
return x.h < y.h;
return x.m < y.m;
}
bool operator>(tim x, tim y) {return y < x;}
int t;
int main()
{
cin >> t;
while (t--)
{
tim x, y;
x.read(), y.read();
if (x > y)
cout << "Yes" << endl;
else
cout << "No" << endl;
}
return 0;
}