HDU 4596
来源:互联网 发布:js 多层嵌套json取值 编辑:程序博客网 时间:2024/06/10 17:41
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
Problem Description
In the year 3013, it has been 1000 years since the previous predicted rapture. However, the Maya will not play a joke any more and the Rapture finally comes in. Fortunately people have already found out habitable planets, and made enough airships to convey all the human beings in the world. A large amount of airships are flying away the earth. People all bear to watch as this planet on which they have lived for millions of years. Nonetheless, scientists are worrying about anther problem…
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.
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.
Input
Multiple test cases, ends with EOF.
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).
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).
Output
If there exists danger, output “Cannot Take off”, else output “Can Take off”.
Sample Input
27 2 37 5 627 2 29 2 2
Sample Output
Can Take offCannot Take off
题意:有n个虫洞,问是不是存在一个ID使得这个ID会让满足两个或者两个以上的虫洞吸引条件。
思路:判断一阶不定方程有解问题,首先区间有重复肯定是不对的。再就是区间不重复的时候,判断ID%x1和ID%x2的解是否分别在[y1,z1]和[y2,z2]的情况。
ID = a*x1 + p = b*x2+q;
a*x1-b*x2 = q - p;
也就是说,判断这个函数的解是否在q - p的区间里,判断gcd(x1,x2)是否在[y2 - z1,z2 - y1]中。(先排序,避免复杂判断
)
#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;}
)
0 0
- HDU 4596
- hdu 4596 (数论)
- HDU 4596 J
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- JS自学|常用互动方法
- mysql 主从配置详解
- 关于OSI七层网路链路层安全和MAC泛红攻击原理
- 数据库练习
- AJAX简介
- HDU 4596
- print()的作用是什么?
- ZedBoard移植Linux(精简版)及BOA服务器的搭建
- UVA216Getting in Line
- golang积累-记忆闭包
- Eclipse中将Java项目转换成Web项目的方法
- centos lamp 安装
- untiy中的委托与事件
- hdu1198 不一样的搜索水题