Codeforces 100A
問題文⇒URL
問題概要をパパッとすると、整数値n(部屋に入れる丸テーブルの数)、R(円形の部屋の半径)、r(円形テーブルの半径)が与えられて(例:n = 4,R = 10,r = 4)、部屋にテーブルが全部入るか入らないか答えよという問題。
テーブル同士かぶったりしてはいけないけど、くっつくのはOK。
幾何と数学の問題。
解法がかすすぎってあっているのか闇。
解法は画像見てね。(世界一わかりにくい)
解法の概要は与えられた数とサイズのテーブルで作ることのできる円の最小半径を求めて、与えられた部屋の半径と比較する。
doubleは誤差が生じるから気を付けよう。
n=1, 2の時は察して
#include <cstdio> #include <math.h> #define MPI 3.14159265358979323846 using namespace std; int main(){ int n,r,R; scanf("%d%d%d",&n,&R,&r); double st = 180.0 / n; double x = r / sin(st * MPI / 180.0); if(n == 1){ x = 0.0; }else if(n == 2){ x = r; } double gosa = 0.00001; if(x + r <= R || fabs(x+r-R) < gosa){ printf("YES\n"); }else{ printf("NO\n"); } return 0; }