#include <stdio.h> typedef struct{ int l; int r; }Trap; int getMax(int a[],int len){ int max=a[0]; for(int i=0;i<len;i++){ if(max<a[i]){ max=a[i]; } } return max; } int getMin(int a[],int len){ int min=a[0]; for(int i=0;i<len;i++){ if(min>a[i]){ min=a[i]; } } return min; } int main(){ int t; scanf("%d",&t); while(t--){ int n,flag=0; scanf("%d",&n); Trap a[n]; int b[n];//陷阱间距 int c[n-1];//两个陷阱距离 int temp=0; for(int i=0;i<n;i++){ scanf("%d %d",&a[i].l,&a[i].r); if(i==0){ b[i]=a[i].r; }else{ b[i]=a[i].r-a[i].l; c[i-1]=a[i].l-temp; temp=a[i-1].r; } } int max=getMax(b,n);//最小步数 int min=getMin(c,n-1);//最大步数 /*for(int i=0;i<n;i++){ printf("%d ",b[i]); } printf("\n"); for(int i=0;i<n-1;i++){ printf("%d ",c[i]); } printf("\n"); printf("%d %d",max,min);*/ if(max>min){ flag=0; }else{ for(int i=max;i<=min;i++){ int location = 0; int j=0; for(;j<n-1;j++){ location+=i; if(location<a[j].r||location>a[j+1].l){ break; } } if(j==n-1&&(location+i)>=a[n-1].r){ flag=1; break; } } } if(flag==1){ printf("YES\n"); }else{ printf("NO\n"); } } } |
Double click to view unformatted code.