文章目录

题解 LGP9222 「PEOI Rd1」Morning or Afternoon

由 hycqwq 发布

思路

在生活中,我们经常熬到下半夜然后发现,在 $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;
}

暂无评论

发表评论