这个 我第二天才做出来,,(菜鸡ben鸡) 就是想不明白陷阱布置完之后怎么跳的
后来看到“ 弹珠每次只能挑一个陷阱,不能多也不能多少 ” 终于想明白是: 因为要跳过所有陷阱,所以要跳最大陷阱
所以用max为跳的距离 每个!陷阱左边起始点 + max 不能超出 第二个陷阱左边起始点 。这样就可以,有猫饼 -。-
看有小伙伴问,就补个图,这样就好理解了。不是每个陷阱必须都挨在一起的。这个题最大的跳距是不知道的,任意的,如果只有一个陷阱,肯定能跳过去的。
如果不是一个陷阱,假设跳过去第一个后,落地点只要不在第二个陷阱中就可以(每次跳一个陷阱)。
所以按照这种思想,只要测试完每一次跳的 起点+max跳距<下一个陷阱的起点,就ok了。
#include<stdio.h>
#include<iostream>
using namespace std;
int main(){
bool success;
int T,n,i,max;
int trap[100][2];
cin>>T;
while(T--){
scanf("%d",&n);
for(i=0;i<n;i++){//输入n个陷阱 [i][0]表示左陷阱 [i][1]表示右陷阱
cin>>trap[i][0]>>trap[i][1];
}
max = 0;
for(i=0;i<n;i++){//找出最大的陷阱 长度为max
if(trap[i][1]-trap[i][0]>max)
max = trap[i][1]-trap[i][0];
}
success = true;
for(i=0;i<n-1;i++){
if(trap[i][0]+max>trap[i+1][0]){//若超过一个陷阱
success = false;
}
}
if(success)
cout<<"YES";
else
cout<<"NO";
if(T!=0){
cout<<endl;
}
}
return 0;
}