关于判断一个矩形能否容下两个圆

来源:互联网 发布:js根据id获取div 编辑:程序博客网 时间:2024/04/30 01:21

题面

给定两个圆和一个矩形,判断两个圆能否放入矩形内。其中,a,b,r1,r2都是浮点数。

分析

考虑两个圆能够放入的一个最基本的必要条件是:半径大的圆放进去后,半径小的圆还可以放进去。也就是满足

min(a,b)>=max(r1,r2)*2

接下来就分析能否放入的临界点,设想右侧短边是一个可以滑动的挡板,从右向左滑动。当a特别大的时候,两个圆靠近呈相切状态,两个圆可以同时与底面相切(但是这并不意味着最节省空间。。。)当矩形不断内缩时,达到临界状态,两个圆分别和矩形相对的边相切,即理想状态下每条边只与一个圆相切。这个时候,就不可以再继续收缩了。

代码

#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<cmath>using namespace std;bool judge(double a,double b,double r1,double r2){    if (a>b) swap(a,b);    if (r1>r2) swap(r1,r2);    if (a<r2*2) return 0;    double z=r1+r2,x=a-z,y=b-z;    return x*x+y*y>=z*z;}int main(){    double a,b,r1,r2;    while(scanf("%lf%lf%lf%lf",&a,&b,&r1,&r2)!=EOF)    {        if (judge(a,b,r1,r2)) printf("YES\n");        else printf("NO\n");    }    return 0;}

彩蛋

原创粉丝点击