CF868B Race Against Time 题解
CF868B Race Against Time 题解。
感觉此题还是挺坑的。
注意
1.秒钟、分钟、时钟是会动的,但只能在开始的一瞬间动,并且移动的距离 。
2.米莎可以瞬间移动因为她开挂了。
3.米莎想咋走就咋走(也就是说她既可以顺时针走也可以逆时针走)。
思路
暴力模拟米莎的运动(真的很暴力,毕竟其他大佬的思路我也不懂)。
这里将表针视为不动,米莎每次走半个格,便可以变相地实现米莎的瞬间移动。
先顺时针走,移动的过程中判断是否碰到指针,碰到后再逆时针走,如果再次碰到,输出 NO 结束,如果有一次没碰到,输出 YES 结束。
在模拟时要统一单位,我这里统一成了秒。
AC 代码
#include<bits/stdc++.h>
using namespace std;
long double t1,t2,shi,miao,fen,mm,mm2,mm3;//mm为起点所指的秒数,mm2为终点所指的秒数,mm3为时针所指的秒数。
int main(){
cin>>shi>>fen>>miao>>t1>>t2;
mm=(t1*60)/12,mm2=(t2*60)/12,mm3=(shi*60)/12;//因为分和秒都是六十进制,所以不用统一。
miao+=0.5,fen+=0.5,mm3+=0.5;//在开始的一瞬间移动一点点(不能大于等于1,否则有可能与起点或终点重合)
if(mm3>60)
mm3-=60;
if(miao>60)
miao-=60;
if(fen>60)
fen-=60;//超过60要重置
while(1){
mm+=0.5;//模拟米莎移动
if(mm>60)
mm-=60;//超过60要重置
if(mm==mm2){
cout<<"YES";
return 0;//到达终点
}
if(mm==mm3||mm==fen||mm==miao)
break;//顺时针走不行,退出,去逆时针走
}//顺时针走
mm=(t1*60)/12;//重置
while(1){
mm-=0.5;
if(mm==0)
mm=60;
if(mm==mm3||mm==fen||mm==miao){
cout<<"NO";//逆时针走也不行,输出NO
return 0;
}
if(mm==mm2){
cout<<"YES";
return 0;
}
}//逆时针走
return 0;
}
补充:
木的这篇题解给我打回后直接把题解关了是什么意思?

浙公网安备 33010602011771号