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;
}