1 条题解

  • 0
    @ 2025-8-24 22:46:30

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar MasCotangent
    我可真是长的太帅了

    搬运于2025-08-24 22:46:30,当前版本为作者最后更新于2023-04-18 18:03:00,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    P9222 「PEOI Rd1」Morning or Afternoon 题解

    题目传送门


    这题的难点在于题面弯弯绕绕,不好理解当然如果大佬秒懂当我没说。所以我们需要形式化题意

    形式化题意

    • 题目有多测。
    • 对每一组测试数据,给出两个十二小时制时间,且你能知道这两个时间之间日期共变化了多少次,问你是否能判断是上午还是下午。
    • 对每一组数据,能判断,输出 Yes,否则输出 No。然后换行。
    • 特别的,没有形如 00:1400 : 14 的时间,而是以 12:1412 : 14 取而代之。

    思路

    这道题看似是逻辑难题,实则徒有其表。因为如下三点。

    1. 如果开始时间于十二小时意义下晚于结束时间,则必然可以判断。
    2. 否则,不能判断。
    3. 容易证明我们实际上不用考虑日期的变化。

    思路有了,还有一个注意点。由于形如 12:3412:34 的时间属于实际是上午/下午的开始,所以我们要把 1212 提前处理为 00

    于是就能通过此题了,细节详见代码。

    AC 代码

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
        int a1,a2,b1,b2,t;
        char c;//用于吸收冒号
        cin>>t;
        for(int i=1;i<=t;i++){
            cin>>a1>>c>>a2>>b1>>c>>b2;
            if(a1==12) a1=0;
            if(b1==12) b1=0;//特殊处理
            if(a1>b1||(a1==b1&&a2>b2)) cout<<"Yes\n";//判断开始时间是否“大于”结束时间
            else cout<<"No\n";
        }
        return 0;
    }
    
    • 1

    信息

    ID
    8465
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者