View Code of Problem 6

#include<iostream>
using namespace std;
int main()
{
	int t,n,l,r;
	cin>>t;
	while(t--)
	{
		int step=0,des=0,flag=1;
		cin>>n;
		if(n==1)
		{
			cout<<"YES"<<endl;
		}
		else
		{
			int ltrap[100]={0},rtrap[100]={0};
			for(int i=0;i<n;i++)
			{
				cin>>ltrap[i]>>rtrap[i];
			}
			step=rtrap[0];                            //此处n至少>=2,输入两个陷阱判断step范围 
			int maxstep=ltrap[1];
			while(step<=maxstep)
			{
				
				flag=0;
				des=0;
				for(int i=0;i<n;i++)
				{
					des+=step;
					if((des<rtrap[i]&&des>ltrap[i])||(des>ltrap[i+1]&&i+1<n))            //跳在陷阱中间或者跳过了至少两个陷阱 
					{
						flag=0;
						break;
					}
					else
					{
						flag=1;
					}
				}
				if(flag)
				{
					cout<<"YES"<<endl;
					break;
				}
				step++;
			}
			if(!flag)
			{
				cout<<"NO"<<endl;
			}
		}
	}
}

Double click to view unformatted code.


Back to problem 6