PKU JudgeOnline 2959 -- Ball bearings

naoki氏が取り組んだみたいなのでちゃんと縮めて晒してみる。


直径Dの円に、直径dの円をできるだけたくさん内接させたい。直径dの円同士の間は距離s以上離れていなければならない。このとき直径dの円は最大いくつ内接させられるかを求める問題。


GCC102B。

main(a){
  float D,d,s;
  for(gets(&a);~scanf("%f%f%f",&D,&d,&s);
        printf("%d\n",a=3.1416/asin(s/=D-d)))
    s+=d;
}

最初acos(1-s*s*2)とか使ってて、asin()で書けることに後から気付いた。
円周率はこれ以上縮めたらWAみたい。
あと、gets(&a)は初めて使ったわー。