首页 > 代码库 > foj 1016 无归之室
foj 1016 无归之室
题目来源:
http://acm.fzu.edu.cn/problem.php?pid=1016
分析:
图画如下:
我们可以 列出方程。
1 ) x * cos(a) + y * sin(a) = A
2 ) x * sin(a ) + y * cos(a) = B
对方程 化简为
2 = (a + b)^2 / (x + y)^2 + (a - b)^2 / (x -y) ^2 ; 3) 式
分三种 情况
1 : x < A && y <B 1) 2) 同时满足 < (符合题意)
2 : x > A 1) 明显 > (不符合题意)
3 : X < A && Y >= B (分情况讨论) 如果3) 式 符号 大于 则 符合题意, 否则 不符合题意
代码如下:
int main(){ double a, b , x , y ; while(scanf("%lf%lf%lf%lf" , &a , &b , &x, &y)){ if(a ==0.0 && b ==0.0 && x == 0.0 && y == 0.0) break; if(a - b > EPS) swap(a ,b); if(x - y > EPS) swap(x , y) ; if(a -x > EPS && b > y + EPS) puts("Escape is possible."); else if( x - a > EPS) puts("Box cannot be dropped."); else { // x < a && y >= b if( (a + b)*(a + b) / ( (x + y)* (x + y) ) + (a - b) * (a - b) / ( (x - y) * (x - y) ) > 2.0 + EPS) puts("Escape is possible.") ; else puts("Box cannot be dropped."); } } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。