kmjp's blog

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

AtCoder ARC #013 : A - 梱包できるかな?、B - 引越しできるかな?

ARC#013は不参加だったので、後で復習。
A~Cは何とかさらっと解けたので良かった。Dは後でチャレンジしよう。
ではまずはA・Bから。
http://arc013.contest.atcoder.jp/tasks/arc013_1
http://arc013.contest.atcoder.jp/tasks/arc013_2

A - 梱包できるかな?

直方体の荷物の3辺の長さと、直方体のダンボールの3辺の長さが与えられる。
すべての荷物を同じ向きでダンボールに入れる場合、最大で入る荷物の数を答える。

荷物の3つの辺を、ダンボールのどの辺に合わせるかで3!通りの組み合わせを列挙すればよい。

void solve() {
	int f,r,i,j,k,l;
	int A[3],B[3];
	int ma=0;
	
	GET3(&A[0],&A[1],&A[2]);
	GET3(&B[0],&B[1],&B[2]);
	
	ma=max(ma,(A[0]/B[0])*(A[1]/B[1])*(A[2]/B[2]));
	ma=max(ma,(A[0]/B[0])*(A[2]/B[1])*(A[1]/B[2]));
	ma=max(ma,(A[1]/B[0])*(A[0]/B[1])*(A[2]/B[2]));
	ma=max(ma,(A[1]/B[0])*(A[2]/B[1])*(A[0]/B[2]));
	ma=max(ma,(A[2]/B[0])*(A[0]/B[1])*(A[1]/B[2]));
	ma=max(ma,(A[2]/B[0])*(A[1]/B[1])*(A[0]/B[2]));
	
	_P("%d\n",ma);
	return;
}

B - 引越しできるかな?

複数の直方体の荷物があり、それぞれ3辺の長さが与えられる。
同じサイズのダンボールをたくさん準備してこれら荷物を詰め込む場合、荷物を詰め込める体積が最小のダンボールを答える。

各荷物について、辺の長い順にダンボールの長い辺に合わせていくことを考える。
直方体の荷物の3辺の長さをソートし、3辺それぞれの最大値を求めればよい。

int C;

void solve() {
	int f,r,i,j,k,l;
	int A[3],B[3];
	
	A[0]=0;
	A[1]=0;
	A[2]=0;
	C=GETi();
	FOR(i,C) {
		GET3(&B[0],&B[1],&B[2]);
		sort(B,B+3);
		A[0] = max(A[0],B[0]);
		A[1] = max(A[1],B[1]);
		A[2] = max(A[2],B[2]);
	}
	_P("%d\n",A[0]*A[1]*A[2]);
	return;
}

まとめ

最近Codeforceもそうだけど、問題群を同じテーマで揃えるの流行ってる?
TopCoderは登場人物は同じでも問題の内容はバラけてるけど…。