Description
Input
输入的第一行是一个整数,为数据的组数t(t<=1000)。
每组数据占一行,包括4个数A,B,R1,R2,均为不超过1e4的正整数。
Output
Sample Input
2 10 10 1 1 10 10 4 4
Sample Output
YES NO
解题思路:特判两个圆平放的情况,处理两个圆斜放的情况,矩形两边减去大小圆半径和后,与圆心距构成一个直角三角形,如果斜边平方大于两直角边平方和,两个圆相离,可放;如果两个斜边平方等于两直角边平方和,两圆相切,可放;如果两个斜边平方小于两直角边平方和,两圆相交,不可放。
#include<stdio.h> #include<algorithm> #include<string.h> using namespace std; int main(){ int t; scanf("%d",&t); while(t--){ int A,B,R1,R2; scanf("%d%d%d%d",&A,&B,&R1,&R2); if(A>B) swap(A,B); if(R1>R2)swap(R1,R2); int difA=A-R1-R2; int difB=B-R1-R2; if(2*R1>A||2*R2>A||difA<0||difB<0){ printf("NO\n"); }else{ difA*=difA; difB*=difB; int dif=R1+R2; dif*=dif; if(dif>difA+difB){ printf("NO\n"); }else{ printf("YES\n"); } } } return 0; }
ACdream 1098——圆有点挤——————【数学计算】
原文:http://www.cnblogs.com/chengsheng/p/4371886.html