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は登場人物は同じでも問題の内容はバラけてるけど…。