View Code of Problem 6

#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.


Back to problem 6