题解 洛谷P6484 【[COCI2010-2011#4] ASTRO】

Description

题号 出处 参考难度 \(AC\)时间及记录
\(\texttt{洛谷P6484}\) \(\texttt{COCI2010-2011}\) \(\texttt{洛谷难度:普及-}\) \(\texttt{On 2020/12/04}\)

Solution

这道题目应该不难吧。
首先我们很容易想到我们要将\(H:M\)的形式转换成分钟,这样会好计算很多。
然后我们判断一下无解,这个其他的题解证明过了,这里就不再给出证明。
即:\(abs(T1-T2)\%Gcd(T3,T4)==0?有解:无解\)
其次,我们不断将时间少的往前推,直至二者相等。
最后再换成题目要求的输出形式即可。

Code

#include<bits/stdc++.h>
#define BetterIO ios::sync_with_stdio(false)
#define Fr(i,A,B,X) for(i=A;i<=B;i+=X)
#define Reg register
#define Ll long long
#define Et exit(0)
#define Iln inline
#define Vod void
#define In int
#define MAX 1001
using namespace std;
Iln In Gcd(In A,In B)
{
    return B==0?A:Gcd(B,A%B);
}
In main(Vod)
{
    BetterIO;
    Reg char C;
    Reg In H1,H2,H3,H4;
    Reg In M1,M2,M3,M4;
    cin>>H1>>C>>M1;
    cin>>H2>>C>>M2;
    cin>>H3>>C>>M3;
    cin>>H4>>C>>M4;
    Reg In T1,T2,T3,T4;
    T1=H1*60+M1;/*换算成分钟计算*/
    T2=H2*60+M2;/*换算成分钟计算*/
    T3=H3*60+M3;/*换算成分钟计算*/
    T4=H4*60+M4;/*换算成分钟计算*/
    if(abs(T1-T2)%Gcd(T3,T4))/*判断是否无解*/
    {
        cout<<"Never"<<endl;
        return 0;
    }
    while(T1!=T2)/*判断是否同时闪烁*/
    {
        switch(T1<T2)/*时间较少的就再往上加*/
        {
            case true:T1+=T3;break;
            case false:T2+=T4;break;
        }
    }
    switch(T1/1440%7)/*T1/1440%7就是天数*/
    {
        case 0:cout<<"Saturday"<<endl;break;
        case 1:cout<<"Sunday"<<endl;break;
        case 2:cout<<"Monday"<<endl;break;
        case 3:cout<<"Tuesday"<<endl;break;
        case 4:cout<<"Wednesday"<<endl;break;
        case 5:cout<<"Thursday"<<endl;break;
        case 6:cout<<"Friday"<<endl;break;
    }
    T1%=1440;
    if(T1/60<10)/*T1/60就是小时*/
    {
        cout<<0;
    }
    cout<<T1/60;
    cout<<':';
    if(T1%60<10)/*T1%60就是分钟*/
    {
        cout<<0;
    }
    cout<<T1%60<<endl;
    return 0;
}
posted @ 2020-12-04 10:41  Bushuai_Tang  阅读(95)  评论(0)    收藏  举报