zoukankan      html  css  js  c++  java
  • ACdream 1098——圆有点挤——————【数学计算】

    圆有点挤
    Time Limit:1000MS     Memory Limit:64000KB     64bit IO Format:%lld & %llu

    Description

    gg最近想给女友送两个精美的小礼品:两个底面半径分别为R1和R2的圆柱形宝石,并想装在一个盒子里送给女友。好不容易找到了一个长方体的盒子,其底面为A*B的矩形,他感觉好像宝石装不进去,但又不敢轻易塞进去试试。现请你帮他判断两个宝石能否放进盒子里(宝石只能竖直放置,且不能堆叠)。

    Input

    输入的第一行是一个整数,为数据的组数t(t<=1000)。

    每组数据占一行,包括4个数A,B,R1,R2,均为不超过1e4的正整数。

    Output

    对于每组数据,若两个宝石能放进盒子中,则输出YES,否则输出NO。

    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
    ");
            }else{
    
                difA*=difA;
                difB*=difB;
                int dif=R1+R2;
                dif*=dif;
                if(dif>difA+difB){
    
                    printf("NO
    ");
                }else{
    
                    printf("YES
    ");
                }
            }
        }
        return 0;
    }
    

      

     
    
    
    
    
  • 相关阅读:
    nodejs关于前后端图片上传的思路及实现代码
    vue项目better-scroll使用注意点
    nuxt.js的使用和开发,一款vue基于服务器SSR渲染工具
    vue-cli3.0中自定css、js和图片的打包路径
    Vue.js watch监视属性
    React Developers的10个超实用神奇工具
    Vue 3.0 体验 Vue Function API
    Dojo Store 概念详解
    React Native 实现城市选择组件
    java 环境变量 设置 问题
  • 原文地址:https://www.cnblogs.com/chengsheng/p/4371886.html
Copyright © 2011-2022 走看看