Codeforces 140 A. New Year Table
問題
半径Rの円の内部に、半径rの円をn個、Rの円周とrの円周が接するように置きたい。
そのような置き方が可能であればYESを、そうでなければNOを出力せよ。
制約条件
r,R≦1000
n≦100
方針
小さな円が占める円周角は、2*asin(r/(R-r))と表せる。
これが、2*PIの中にいくつ取れるか見てやればよい。
n=1のときはコーナーケースで、r≦Rならば円は必ず置ける。
ソースコード
void run(){ int n,r,R; cin>>n>>R>>r; if(n==1){ cout<<(r<=R?"YES":"NO")<<endl; return; } if(r*2>R){ cout<<"NO"<<endl; return; } double t=asin(r*1.0/(R-r)); cout<<(n<=(int)(acos(-1.0)/t+1e-9)?"YES":"NO")<<endl; }