CF868B Race Against Time 题解

CF868B Race Against Time 题解。

题目传送门

感觉此题还是挺坑的。

注意

1.秒钟、分钟、时钟是会动的,但只能在开始的一瞬间动,并且移动的距离 <1< 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;
}

补充:

木的这篇题解给我打回后直接把题解关了是什么意思?

posted @ 2024-03-04 19:01  IOI_official  阅读(34)  评论(0)    收藏  举报  来源