本题是找一个数num,st:a=num%x[i],b=num%x[j],y[i]<=a<=z[i]&&y[j]<=b<=z[j];如果存在这样的数则输出:Cannot Take off,否则就输出:Can Take off;
解题思路:
num=x[i]*k1+a;
num=x[j]*k2+b;
x[j]*k2-x[i]*k1=b-a;
则不定方程有解得条件是:(b-a)%gcd(x[i],x[j])=0;
并且y[j]-z[i]<=(b-a)<=(z[j]-y[i]);
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
int x[1005];
int y[1005];
int z[1005];
int gcd(int a,int b){
if(b==0) return a;
else return gcd(b,a%b);
}
bool make(int i,int j){
int l=y[j]-z[i];
int r=z[j]-y[i];
int d=gcd(x[i],x[j]);
if(l%d==0||r%d==0) return true;
else return l/d!=r/d;
}
int main(){
int n;
bool ok;
while(~scanf("%d",&n)){
for(int i=0;i<n;i++)
scanf("%d %d %d",&x[i],&y[i],&z[i]);
ok=false;
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(make(i,j)){
ok=true;
break;
}
}
if(ok==true) break;
}
if(ok==true) printf("Cannot Take off\n");
else printf("Can Take off\n");
}
return 0;
}