kmjp's blog

競技プログラミング参加記です

Codeforces #313 Div1 A. Gerald's Hexagon

久々にまともなレート上昇。
http://codeforces.com/contest/559/problem/A

問題

1辺1の正三角形を上下に交互にくっつけて、各内角が120度となる六角形を作る。
(具体例は問題の図を参照)

この6角形の辺の長さA[1]~A[6]が与えられたとき、何個の三角形をくっつけて作られた図形であるか答えよ。

解法

Editorialの図がわかりやすい。
上の辺から時計回りに長さがA[1]~A[6]とする。
この六角形は長さA[1]+A[2]+A[3]の三角形の角から、長さA[1]、A[3]、A[5]の三角形を取り除いた図形と見なせる。

1辺xの正三角形は、(相似の関係から)1辺1の長さの三角形x^2個からなる。
よって解は (A_1+A_2+A_3)^2 - A_1^2 - A_3^2 - A_5^2

int A[10];
int B[3];


void solve() {
	int i,j,k,l,r,x,y; string s;
	
	FOR(i,6) cin>>A[i];
	B[0]=A[0]+A[1]+A[2];
	B[1]=A[2]+A[3]+A[4];
	B[2]=A[4]+A[5]+A[0];
	
	cout<<B[0]*B[0]-A[0]*A[0]-A[2]*A[2]-A[4]*A[4]<<endl;
	
}

まとめ

本番1辺xの三角形が1辺1の三角形何個からなるか1段ずつまじめに足し算して1分ロスした。
相似だからx^2なのは当たり前だよね…。