1. 程式人生 > >BUAA 111 圓有點擠

BUAA 111 圓有點擠

mod min 圓與矩形 nbsp type con 堆疊 font 感覺

題目描述

gg最近想給女友送兩個精美的小禮品:兩個底面半徑分別為R1和R2的圓柱形寶石,並想裝在一個盒子裏送給女友。
好不容易找到了一個長方體的盒子,其底面為A*B的矩形,他感覺好像寶石裝不進去,但又不敢輕易塞進去試試。
現請你幫他判斷兩個寶石能否放進盒子裏(寶石只能豎直放置,且不能堆疊)。

輸入

輸入的第一行是一個整數,為數據的組數t(t<=1000)。
每組數據占一行,包括4個數A,B,R1,R2,均為不超過104的正整數。

輸出

對於每組數據,若兩個寶石能放進盒子中,則輸出YES,否則輸出NO。

輸入樣例

2
10 10 1 1
10 10 4 4

輸出樣例

YES
NO

題解:判斷矩形最小邊是否小於兩圓中最大圓的直徑,小於判“NO”;然後判矩形兩邊減去兩圓

半徑後的平方和與兩圓圓心距平方的大小關系,相等為兩圓與矩形相切;大於為相離;小於為相交(看圖比較直觀)

技術分享
 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <vector>
 6 #include <cstdlib>
 7 #include <iomanip>
 8 #include <cmath>
 9 #include <ctime>
10
#include <map> 11 #include <set> 12 using namespace std; 13 #define lowbit(x) (x&(-x)) 14 #define max(x,y) (x>y?x:y) 15 #define min(x,y) (x<y?x:y) 16 #define MAX 100000000000000000 17 #define MOD 1000000007 18 #define pi acos(-1.0) 19 #define ei exp(1) 20 #define PI 3.141592653589793238462 21
#define INF 0x3f3f3f3f3f 22 #define mem(a) (memset(a,0,sizeof(a))) 23 typedef long long ll; 24 ll gcd(ll a,ll b){ 25 return b?gcd(b,a%b):a; 26 } 27 bool cmp(int x,int y) 28 { 29 return x>y; 30 } 31 const int N=10005; 32 const int mod=1e9+7; 33 int a[256]; 34 int main() 35 { 36 std::ios::sync_with_stdio(false); 37 int t; 38 cin>>t; 39 while(t--){ 40 int a,b,r1,r2; 41 cin>>a>>b>>r1>>r2; 42 if(2*max(r1,r2)>min(a,b)) cout<<"NO"<<endl; 43 else { 44 if((a-r2-r1)*(a-r2-r1)+(b-r2-r1)*(b-r2-r1) >= (r1+r2)*(r1+r2)) 45 cout<<"YES"<<endl; 46 else cout<<"NO"<<endl; 47 } 48 } 49 return 0; 50 }

BUAA 111 圓有點擠