10691 ACM 光环
时间限制:1000MS 内存限制:65535K 提交次数:0 通过次数:0
题型: 编程题 语言: 无限制
Description
话说XCC 经常要打比赛,要知道,ACM界流传着一个经典的定理 , 那就是rp守恒~因此 XCC 赛前总不忘去膜拜一下 无所不能的Qing教主 ,大赛前大Orz~小赛前小Orz~ 以求可以爆 rp ~~~~然而,要爆rp是要出现 ac 光环的,传说中的ac 光环是圆的(如下图); 而损rp 也会出现光环,那就是wa 光环。。。。正方形的(如下图)。 之所以要 rp 守恒是指 ac 光环和 wa 光环要相交,因为两个光环差不多大, 所以此处不考虑它们一方完全包含另一方的情况。如果它们相交了,则 rp 守恒; 否则, ac 光环会因为能量过大导致 rp 溢出。。。。后果嘛,就像int 溢出那样, rp 迅速负无穷大~~然后 XCC这次比赛就要吃蛋蛋了 T_T , 当然咯,acm是看实力的,以上就当开个玩笑,这道题很简单,给你一个圆和正方形,判断它们是否能让rp守恒就好了。
Input
第一行是六个数字,为wa光环与二维坐标轴平行时的左上顶点,左下顶点和右下顶点。 第二行是三个数字,为ac 光环的圆心和半径。
Output
当rp 守恒时,输出 “rp balanced.”,否则 ,输出“Oh no~”。 所有数值都在区间 [-1000,1000] 内
Sample Input
5 5 5 3 7 3 1 0 1
Sample Output
Oh no~
Hint
如果刚好只相交了一个点的话,没让rp守恒哦~
Source
scau_acm
Provider
scau_acm
#include<stdio.h> int main() { int x1, y1, x2, y2, x3, y3, x4, y4, x, y, r, flag = 0; scanf("%d%d%d%d%d%d%d%d%d", &x1, &y1, &x2, &y2, &x3, &y3, &x, &y, &r); x4 = x3, y4 = y1; if(x2 <= x && x <= x3 && y2-r < y && y < y1 + r) flag = 1; else if(y2 <= y && y <= y1 && x1-r < x && x < x3 + r) flag = 1; else { if(x1 - x < r && y - y1 < r && (x-x1)*(x-x1) + (y-y1)*(y-y1) < r*r) flag = 1; if(x2 - x < r && y2 - y < r && (x-x2)*(x-x2) + (y-y2)*(y-y2) < r*r) flag = 1; if(x - x3 < r && y3 - y < r && (x-x3)*(x-x3) + (y3-y)*(y3-y) < r*r) flag = 1; if(x - x4 < r && y - y4 < r && (x-x4)*(x-x4) + (y-y4)*(y-y4) < r*r) flag = 1; } if(flag) printf("rp balanced.\n"); else printf("Oh no~\n"); return 0; }
解题思路:
1y 画一个图表示就什么都清楚了。当圆的圆心落在外围黑圆矩形所围成的区域(不包括外围黑框)时, 圆和矩形就能够相交,其中四周四个小矩形(长和宽长度差异大
两个1/4夹住)的宽为圆的半径。