Yet another end of the world
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1084 Accepted Submission(s): 451
As we know that long distance space travels are realized through the wormholes, which are given birth by the distortion of the energy fields in space. Airships will be driven into the wormholes to reach the other side of the universe by the suction devices placed in advance. Each wormhole has its configured attract parameters, X, Y or Z. When the value of ID%X is in [Y,Z], this spaceship will be sucked into the wormhole by the huge attraction. However, the spaceship would be tear into piece if its ID meets the attract parameters of two wormholes or more at the same time.
All the parameters are carefully adjusted initially, but some conservative, who treat the Rapture as a grain of truth and who are reluctant to abandon the treasure, combine with some evil scientists and disrupt the parameters. As a consequence, before the spaceships fly into gravity range, we should know whether the great tragedy would happen or not. Now the mission is on you.
In each case, the first line contains an integer N(N<=1000), which means the number of the wormholes.
Then comes N lines, each line contains three integers X,Y,Z(0<=Y<=Z<X<2*109).
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int x,y,z;
bool operator <(const node&a)const
{
if(y!=a.y)return y < a.y;
return z < a.z;
}
}num[1024];
int gcd(int a,int b)
{
return a == 0?b:gcd(b%a,a);
}
bool judge(int i,int j)
{
int y1 = num[i].y,z1 = num[i].z;
int y2 = num[j].y,z2 = num[j].z;
int x1 = num[i].x,x2 = num[j].x;
if(y1 <= y2&&z1>=y2&&z2>=y1&&z2>=z1)
return true;
if(y1>=y2&&z2>=z1)
return true;
if(y1>=y2&&z2>=y1&&z1>=z2&&z1>=y1)
return true;
if(y2>=y1&&z1>=z2)
return true;
int dif = gcd(x1,x2);
int l = y2 - z1,r = z2 - y1;
if((l<=dif&&dif<=r)||(dif<=r - l+1))
return true;
return false;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i = 0;i < n;i++)
{
scanf("%d%d%d",&num[i].x,&num[i].y,&num[i].z);
}
sort(num,num+n);
bool ok = 1;
for(int i = 0;i < n;i++)
{
for(int j = i+1;j < n;j++)
{
if(judge(i,j))
ok = 0;
}
}
if(ok)
printf("Can Take off\n");
else
printf("Cannot Take off\n");
}
return 0;
}
)