题解 洛谷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;
}
不要妄图追上西坠的太阳,而是要在黎明前就等着它!
浙公网安备 33010602011771号