SlideShare a Scribd company logo
AtCoder Regular Contest 013
解説
非公式解説
@hamayanhamayan
#A
梱包できるかな?
問題概要
• サイズ N × M × L のダンボールにサイズ P × Q × R の荷物を出来
るだけ詰め込む
• 詰め込むときに荷物を90度倒しても良い
• ダンボールに詰め込める荷物の最大個数は?
• 1 ≦ N,M,L ≦ 100
• 1 ≦ P,Q,R ≦ 100
解法
• 荷物を回転させると6パターンできる
• (縦,横,高さ)= (P, Q, R), (P, R, Q), (Q, P, R)
• (Q, R, P), (R, P, Q), (R, Q, P)
• 全部で詰める荷物の数を計算し、最大値を出力
• 計算式は (N / P) * (M / Q) * (L / R)
• 除算部分は整数計算で小数点以下を切り捨てさせる
#B
引越しできるかな?
問題概要
• i 個目の大きさがそれぞれ Ni × Mi × Li である荷物が C 個ある
• この荷物から1つ選んで、直方体のダンボールに入れるとする
• この時、どの荷物を選んでも入れることができるダンボールの容
積の最小値は?
• 90度単位での回転は許される
• 1 ≦ C ≦ 100
• 1 ≦ N, M, L ≦ 100
• 部分点
• 1 ≦ C ≦ 10 を満たす入力に正解すると 40 点
部分点解法
• 思いつかない
解法
• ダンボールがあった時に荷物が入るかどうか確認する時は、
• 荷物の1番目に長い辺 ≦ ダンボールの1番目に長い辺
• 荷物の2番目に長い辺 ≦ ダンボールの2番目に長い辺
• 荷物の3番目に長い辺 ≦ ダンボールの3番目に長い辺
• を満たせば入ることが分かる
• つまり、各荷物に対して、上の条件が満たされるようにサイズを
拡張していく
• 具体的には
• ダンボールのサイズを 0 × 0 × 0 (N = 0, M = 0, L = 0) で初期化
• 各荷物 i に対して
• Ni , Mi , Li をソートして一番長い辺を Ni、二番目を Mi、三番目を Li とする
• N = max(N, Ni), M = max(M, Mi), L = max(L, Li) で更新
• N * M * L が答え
#C
笑いをとれるかな?
問題概要
• N 個の豆腐があり、それぞれ以下の情報が与えられる
• 豆腐の縦の長さ X 、横の長さ Y 、高さ Z
• 豆腐に含まれるハバネロの個数 M
• ハバネロの位置 (x, y, z) が M 個分
• この時、高橋くんと青木くんが以下のルールでゲームを行う
• 先攻は青木くん
• 自分の番では、豆腐を1つ選んで下図の切り方で切り、どちらかを食べる
• もし食べた中にハバネロが含まれていたら負け
問題概要
• 高橋くんと青木くんがハバネロの位置を把握していて、互いに最
適な行動を行うときに
• 高橋くんが勝つなら”WIN”
• 高橋くんが負けるなら”LOSE”
• を出力
• 1 ≦ N ≦ 1000
• 1 ≦ X, Y, Z ≦ 10^9
• 1 ≦ M ≦ 100
• 0 ≦ x ≦ X-1 0 ≦ y ≦ Y-1 0 ≦ z ≦ Z-1
• 部分点
• N = 1 かつ 1 ≦ X, Y, Z ≦ 20 を満たす入力に正解すると 30 点
部分点解法
• Nim問題を排他的論理和以外で解く方法を
• 知らないので書けないです…
• 深さ優先探索とかで書ける?
必要知識
• この問題は「勝敗判定系問題」特有の知識が必要です
• http://d.hatena.ne.jp/nanikaka/20120524/1337797626
• 上のサイトがとても参考になります
Nim
• K個のコインの山があり、各山には n1, … , nK 個のコインがある
• 2人のプレイヤーは交互に好きな山から1枚以上のコインを取る
• 最後の1枚を取ったプレイヤーの勝ち
• このNimの勝敗はコインの数の排他的論理和 xor を計算すると分かる
• n1 xor … xor nK が 0 なら後手の勝ち、1 なら先手の勝ち
考察
• 今回の問題は実質 Nim と同じ問題と考えることができる
• 両者とも最善の行動を取れば、各豆腐はハバネロが全て収まる最
小サイズまで削られる
• 各豆腐をそのサイズまで削る為に、x軸,y軸,z軸のそれぞれ両側か
ら無駄な部分を互いに1つ以上削り合っていく事になる
• 6つの山からコインを1枚以上取っていくことと同じである
• つまり
• N個の豆腐 → 4N個の山
• 無駄な部分として削れる個数 → 山にあるコインの枚数
• として考えて、Nim として解くことができる
解法
• 各豆腐に対して、ハバネロが全て収まる最小領域を計算する
• 最小領域を (sx~ex, sy~ey, sz~ez) とすると
• sx はハバネロの各座標 x の最小値、 sy, sz も同様
• ez はハバネロの各座標 x の最大値、 ey, ez も同様
• 無駄な部分として削ることができる部分を xor していく
• x軸方向で無駄な部分の数は、sx 個と (X – 1 - ex) 個 なのでこれを xor
• y軸方向、z軸方向も同様
• 全て xor した結果が
• 0 ならば “LOSE”
• 0 でないなら “WIN”
#D
切り分けできるかな?
問題概要
• N 種類の鉄塊があり、それぞれ、縦(X)×横(Y)×高さ(Z) が与えられる
• 1つの鉄塊につき、丁度1回右図のように切り分ける
• 全ての鉄塊の体積のパターンをそれぞれ2つ以上作るためには、何個
の鉄塊が最低必要だろうか?
• 1 ≦ N ≦ 100
• 1 ≦ X, Y, Z ≦ 20
• 部分点
• N = 1 を満たす入力に正解すると 20 点
部分点解法
• 直感的にやってみる
• まず、2つに分けると出来るパターンを全パターン作る
• これは set あたりを使ってやると良い
• 次に、全パターンを2回やったとして出来る体積毎に個数をカウ
ントする
• すると、全個数必ず2個以上作られることになる
• 最後に、全パターンに対して、出来るどちらの体積も3個以上作
られているものを引けなくなるまで引いて答えとする
部分点解法
• これで一応、部分点はもらえました
• もらえたけど、かなりヒューリスティックな解法
• 近似解ではあるけど厳密解ではない(実際、沢山WAが出る)
• 全く解法が思いつかないのであれば、このような博打的方法でも
いいのかも
• (これ以外の部分点解法あればご教授ください…)
• http://arc013.contest.atcoder.jp/submissions/551709
考察
例)切断して出来る体積の組が {1,2}, {1,3}, {1,4} とする
1
2
3
4
1
2
3
4
右図のようにグラフにして考えてみる
こうすると、各パターンが2個以上作られるというこ
とは「左側と右側がそれぞれ1回以上使われるような
最小の辺をとる」ことになる
1
2
3
4
1
2
3
4
この例では全部の辺を用いるパターンである。
よって、この例の答えは 6
考察
• この状況に似た問題がある 「2部グラフの最大マッチング問題」
• 2部グラフとは、両端に頂点があり、片側から片側にのみ辺があるグラフ
• マッチングとは、端点を他と共有しない辺のこと
• 最大マッチング問題とは、マッチングの数を最大にするように辺をとる問題
のこと
• 右図で言うと、緑の辺が最大マッチングの1例
• http://mathtrain.jp/bipartitematching
• とても詳しく書いてある
• 右図もこちらから
考察
今回の問題は最大マッチング問題とは少し違う
1
2
3
4
1
2
3
4
例のグラフで最大マッチングを行うとこうなる
両端の3と4が繋がっていないので、この4つの頂点を
追加すれば答えになりそう
• 全部で N パターン出来るとすると、2部グラフの頂点は 2N 個
• 最大マッチング数を M とすると、つながっている頂点は 2M 個
• より、つながっていない頂点は 2N - 2M
• より求めたい答えは、M + (2N – 2M) = 2N – M で求められる
考察
• 2部グラフの最大マッチングは「最大フロー問題」に帰着できる
• 個人的に最大フロー問題に帰着させた方がいいと思ってる
• Wikipedia「最大フロー問題」
• 右図のようにコスト(水を流せる量)が決まっている有向グラフに対して、s
からtへ流せる最大コスト(流量)を求める問題
• フォード・ファルカーソン法で解く
• 詳しくは省略
考察
• 2部グラフの最大マッチング問題 → 最大フロー問題
• 2部グラフの左側に頂点 s を作り、全ての左側の頂点に辺を作る
• 同様に右側に頂点 t を作り、全ての右側の頂点に辺を作る
• 全ての辺の最大コストを1とする
• この時得られる最大フローは、元の最大マッチング数と等価
s t
解法
• 2つに分ける全パターン作る
• この時、2部グラフの頂点とするべき数も別に集計しておく
• グラフを作る
• 頂点を作る時は左側と右側が同じラベルの頂点だと扱いづらいので、右側の
数は +8000 した数としておく(8000は体積の最大値)
• sは体積0、tは体積16000 として定義し、s から左側、右側から t の辺を追加し
ておく
• 作ったグラフで最大フロー問題を解く
• 「作れる体積の全パターン数 * 2 – 最大マッチング数」が答え
謝辞
• D問題は自力で解けなくて、以下のサイトを参考に作りました
• 解説を上げてるコーダーの方々にはいつもお世話になってます
• http://kmjp.hatenablog.jp/entry/2014/03/12/1000
• http://d.hatena.ne.jp/oupo/20130702/1372749407
• 今回は解法全然分からなくて、しかも、理解も難しくてかなりし
んどかったです
• 上の参考にしたblogの記事もちゃんと理解してる気がしないです

More Related Content

PDF
arc047
PDF
AtCoder Beginner Contest 010 解説
PDF
AtCoder Regular Contest 031 解説
PDF
AtCoder Beginner Contest 024 解説
PDF
AtCoder Beginner Contest 021 解説
PDF
AtCoder Regular Contest 028 解説
PDF
Abc009
PDF
AtCoder Beginner Contest 033 解説
arc047
AtCoder Beginner Contest 010 解説
AtCoder Regular Contest 031 解説
AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 021 解説
AtCoder Regular Contest 028 解説
Abc009
AtCoder Beginner Contest 033 解説

What's hot (20)

PDF
AtCoder Beginner Contest 022 解説
PDF
AtCoder Regular Contest 030 解説
PDF
WUPC2012
PDF
AtCoder Regular Contest 033 解説
PDF
AtCoder Beginner Contest 023 解説
PDF
AtCoder Regular Contest 039 解説
PDF
AtCoder Regular Contest 019 解説
PDF
AtCoder Regular Contest 024 解説
PDF
AtCoder Beginner Contest 006 解説
PDF
AtCoder Beginner Contest 035 解説
PDF
AtCoder Beginner Contest 026 解説
PDF
直交領域探索
PDF
AtCoder Beginner Contest 020 解説
PDF
AtCoder Regular Contest 023 解説
PDF
AtCoder Beginner Contest 025 解説
PDF
AtCoder Regular Contest 027 解説
PDF
AtCoder Regular Contest 046
PDF
AtCoder Regular Contest 020 解説
PDF
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
AtCoder Beginner Contest 022 解説
AtCoder Regular Contest 030 解説
WUPC2012
AtCoder Regular Contest 033 解説
AtCoder Beginner Contest 023 解説
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 019 解説
AtCoder Regular Contest 024 解説
AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 026 解説
直交領域探索
AtCoder Beginner Contest 020 解説
AtCoder Regular Contest 023 解説
AtCoder Beginner Contest 025 解説
AtCoder Regular Contest 027 解説
AtCoder Regular Contest 046
AtCoder Regular Contest 020 解説
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
Ad

Similar to At coder regular contest 013 解説 (6)

PDF
CODE THANKS FESTIVAL 2014 A日程 解説
PDF
CODE FESTIVAL 2015 沖縄ツアー 解説
PDF
暗認本読書会13 advanced
PPTX
Atcoder Regular Contest 014 解説
PPTX
CODE FESTIVAL 2014 本選 解説
PDF
AtCoder Beginner Contest 011 解説
CODE THANKS FESTIVAL 2014 A日程 解説
CODE FESTIVAL 2015 沖縄ツアー 解説
暗認本読書会13 advanced
Atcoder Regular Contest 014 解説
CODE FESTIVAL 2014 本選 解説
AtCoder Beginner Contest 011 解説
Ad

At coder regular contest 013 解説