マトリョーシカ的日常

ワクワクばらまく明日のブログ。

最小の三角形 (Topcoder SRM 547 div2 250pt)

 今回の問題は簡単です。

TopCoder Statistics - Problem Statement


日本語訳

問題文
 あなたにはひとつの正の整数の”長さ”が与えられる。私たちは一辺が”長さ”の正六角形を持っている。(六つの辺を持つ多角形のことで、それぞれのなす角度は120度である。)私たちは交わらない斜線を三本引く。そうすると六角形の内部は四つの三角形に分割される。それぞれの面積を計算し、面積が最小となる三角形をとりだす。
 とりだした三角形のうち最大の面積を計算して返せ。

 意味がとりづらい英文でした。紙に書いてみると分かりますが、六角形にそれぞれ交わらない斜線を引くとなると一通りしか考えられません。その中で一番小さいのは二辺が六角形の辺になる二等辺三角形である。
 つまり面積Sは一辺をLとすると、S=L*(L*sin(120度))/2となる。sin120=(ルート3)/2である。

 以下僕のコード。

#include 
#include 
#include 
#include 
using namespace std;
class MinimalTriangle {
	public:
	double maximalArea(int length){
		double small_area;
		//sin(60deg)=root(3)/2
		double root_three=1.732050807568877;
		small_area=length*length*(root_three/2)/2;
		printf("%20f\n",small_area);
		return small_area;
	}
};
int main(){
	MinimalTriangle ob1;
	int length;
	scanf("%d",&length);
	ob1.maximalArea(length);
	return 0;
}