intさわだんのBlack History

刹那的レジェンドになりたい。

Codeforces 100A

問題文⇒URL

問題概要をパパッとすると、整数値n(部屋に入れる丸テーブルの数)、R(円形の部屋の半径)、r(円形テーブルの半径)が与えられて(例:n = 4,R = 10,r = 4)、部屋にテーブルが全部入るか入らないか答えよという問題。
テーブル同士かぶったりしてはいけないけど、くっつくのはOK。


幾何と数学の問題。

解法がかすすぎってあっているのか闇。

解法は画像見てね。(世界一わかりにくい)
解法の概要は与えられた数とサイズのテーブルで作ることのできる円の最小半径を求めて、与えられた部屋の半径と比較する。
f:id:intsawadan:20140507192826j:plain

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