SlideShare uma empresa Scribd logo
1 de 30
ARC029 解説 
解説スライド担当: 城下慎也(@phidnight)
問題A – 高橋君とお肉
問題概要 
• 2 つの肉焼き器を用いてお肉を焼く。 
• 푁 個のお肉を肉焼き器を使って焼く。 
• うまく割り当てて、すべてのお肉が焼けるまでの時間を最小化せよ。 
• 1 ≦ 푁 ≦ 4
解法 
• 全探索をすることで答えることができます。 
• お肉をどちらの肉焼き器に割り当てるかという、全部で2푁 ある組み 
合わせを試します。 
• 割り当てた後、それぞれの肉焼き器が肉を焼くのにかかる時間は、 
割り当てられた肉が要求する焼き時間の合計値と同じになります。 
• 2 つある合計値のうち大きいほうがその割り当てにおける焼き時間 
となります。 
• 計算量はO(푁 ∗ 2푁) となります。 
• 푁 ≦ 4 なので、満点をとることができます。
備考 
• 指数全探索は競技プログラミングでは頻出です。 
• 特に、部分点として出やすいので、ぜひとも習得してください! 
• ちなみに、この問題は、すべてのお肉の焼き時間の合計値を푀とお 
いたときに、푀/2 以上で最小の部分和を求める問題に帰着すること 
ができます。 
• 上記の帰着により動的計画法でO(푁푀) で解くことができます。
問題B – 高橋君と禁断の書
問題概要 
• ノートと箱(ともに長方形で考える) が与えられる。 
• それぞれの箱について、ノートが入るか否かを判定せよ。 
• 1 ≦ 푁 ≦ 5,000 
• 1 ≦ 辺の長さ≦ 100,000
幾何の問題 
• 幾何の問題は競技プログラミングで出てくることがあります。 
• 実数計算とか特有の問題もあるので、慣れておくと良いと思います。 
• 角度やベクトル計算(外積、内積) などを知っておくと役立つことがあ 
ります。
実行できない解法 
• すべての角度を試します。 
• 「すべての角度」は、数え上げることができません。 
• この方針だと、計算が終了しません。
実行できない解法 
• すべての角度を試します。 
• 「すべての角度」は、数え上げることができません。 
• この方針だと、計算が終了しません。 
• そのため、計算可能なように探索候補をしぼる必要があります。
危険な解法 
• ランダムに角度を決めて置く、という動作を一定回数繰り返し、何回 
やってもダメならNO とし、うまく置けたらYES とします。 
• 下図のような配置の場合、うまくいく確率がとても低く、NO と行ってし 
まう確率が高くなります。
考察 
• 最初に、すべてを横向きに合わせます。 
• 少しずつ回転させていくと、高さが増えていくので、高さが一致したと 
きのみを試すと斜めのケースも対応できる。
解法 
• 縦横に平行なケースを試し、斜めを、高さが一致した場合に限定す 
ることでそれぞれO(1) で計算することができます。 
• 高さが一致する瞬間は、最大値になる角度まで範囲で角度の二分 
探索で計算することができます。
問題C – 高橋君と国家
問題概要 
• グラフが与えられます。 
• 頂点に交易所、辺に舗装道を設置して、交易所へ舗装されていない 
道路を経由して移動できるようにします。 
• 設置と舗装のコストが与えられるので、コストの合計を最小にしてく 
ださい。 
• 1 ≦ 푁(頂点数) ≦ 100,000 
• 1 ≦ 푀(辺数) ≦ 200,000
部分点解法1 (10点) 
• すべての都市、道に対して、操作をするかしないかを決めて、その 
決め方でうまくいっているかを試します。 
• うまく行っているかの判定は、各都市に対して、その都市の連結成 
分に交易所のある都市が入っているかを判定すれば良いです。 
• 幅優先探索などを用います。 
• 計算量はO(푁 ∗ 푀 ∗ 2푁+푀) などになります。 
• Union – find を用いると手早く連結判定はできます。
部分点解法2 (10 + 20点) 
• すべての都市に対して、操作をするかしないかを決めます。 
• 辺を効率的に選択します。
部分点解法2 (10 + 20点) 
• アイデアとして、交易所のある頂点を1 つにまとめてみる。
部分点解法2 (10 + 20点) 
• アイデアとして、交易所のある頂点を1 つにまとめてみる。 
• すると、全体が1 つの連結成分になることがわかる。
部分点解法2 (10 + 20点) 
• アイデアとして、交易所のある頂点を1 つにまとめてみる。 
• すると、全体が1 つの連結成分になることがわかる。
部分点解法2 (10 + 20点) 
• 「辺にコストがあって、辺の集合を選び全体を1 つの連結成分にす 
る選び方のうち、費用の合計値が最小となる選び方を求める問題」 
に帰着することができました。 
• 上記の問題は、「最小全域木問題」として知られています。 
• クラスカル法やプリム法で効率的に計算することができます。 
• 交易所の設置方法は全部で2푁 通りあり、すべてについて求めるこ 
とで答えを求めることができます。 
• 注意点として、交易所の設置方法によっては解が存在するとは限り 
ません(元のグラフで、全体が連結でない場合など)。
部分点解法3 (10 + 20 + 30点) 
• 最初に、交易所の頂点集合を選ぶ代わりに、仮想的な都市X を用 
意します。 
• 都市X と都市푖 1 ≦ 푖 ≦ 푁 の間には、コスト푐푖(交易所の設置コスト 
と一緒) の辺を張ります。 
• 都市1 から都市푁 に関しては、交易所を置く代わりに、都市X との 
辺を選ぶという操作だと考えます。 
X 
푐1 푐2 푐3 
푐푁 
1 2 3 … 푁
部分点解法3 (10 + 20 + 30点) 
• この処理をしたあと、良い状態であることと、都市X を含めて全体で 
連結であることが同値となります。 
• このグラフで最小全域木問題を解けば解が得られます。 
• 有効な候補は毎回O(N + 푀) 本で、最大O(푁) 回試すので、全体で 
O(푁(푁 + 푀)) となります。 
X 
푐1 푐2 푐3 
푐푁 
1 2 3 … 푁
満点解法 
• 先ほどの部分点解法3 で、プリム法やクラスカル法を用いて高速化 
すれば満点となります。
問題D – 高橋君と木のおもちゃ
問題概要 
• 有向木(のおもちゃ)が与えられます。 
• 푀個ある各整数を、置くか置かないかをします。 
• 木の頂点に置いたら、頂点は親に古い数字を送ります。 
• 最終的に残る整数の合計を最大化してください。 
• 1 ≦ 푁(頂点数) ≦ 5,000 
• 1 ≦ 푀(候補数) ≦ 5,000
部分点解法1 
• すべての置き方(置かないを含め)を試します。 
• (푁 + 1)푀 通りを試すと答えが得られます。
考察 
• 元からある数字について考えます。 
• ある数字について、その数字が追い出されるなら、その数字を持っ 
ていた頂点の先祖となる頂点にあった数字もすべて追い出されてい 
ます。 
• すると、追い出される数字を持っていた頂点の集合は、頂点1 を含 
む部分木となっているはずです。 
• 逆に部分木(頂点数を푋とする)が決まると、部分木の深いところから 
順に푋 回おくだけで部分木のすべての整数を追い出すことができま 
す。
考察 
• この場合、残せる数字は푋個だけです。 
• 先ほどの方法だと、おいた数字すべてを残すことができるので、奥 
候補の数字から、大きいのを푋個取り出せばよいです。 
• すると、頂点1 を根とする部分木の中で頂点数が푋であるものを0 ≦ 
푋 ≦ 푁 ですべて求めることで計算できます。
考察+ 満点解法 
• この計算は、各頂点x に対して、その頂点x を根する部分木でi 個 
選ぶ方法をdp[x][i] とする動的計画法で計算できます。 
• この計算は各頂点に対して、子の頂点数がs1,s2,s3, … ,sk である場 
合に、O(s1s2 + (s1+s2)s3 + … + (s1+s2+…+s(k-1))sk)となります。 
• これは一見N の2 乗に見えますが、(s1+s2+…+sk)^2 より小さいこと 
がわかるので、頂点1 で考えるとN の2 乗で済みます。

Mais conteúdo relacionado

Mais procurados

AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説AtCoder Inc.
 
AtCoder Regular Contest 040 解説
AtCoder Regular Contest 040 解説AtCoder Regular Contest 040 解説
AtCoder Regular Contest 040 解説AtCoder Inc.
 
CODE FESTIVAL 予選B 解説
CODE FESTIVAL 予選B 解説CODE FESTIVAL 予選B 解説
CODE FESTIVAL 予選B 解説AtCoder Inc.
 
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Inc.
 
AtCoder Regular Contest 036 解説
AtCoder Regular Contest 036 解説AtCoder Regular Contest 036 解説
AtCoder Regular Contest 036 解説AtCoder Inc.
 
AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説AtCoder Inc.
 
AtCoder Beginner Contest 022 解説
AtCoder Beginner Contest 022 解説AtCoder Beginner Contest 022 解説
AtCoder Beginner Contest 022 解説AtCoder Inc.
 
AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説AtCoder Inc.
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Inc.
 
AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説AtCoder Inc.
 
AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Inc.
 
AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Inc.
 
AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説AtCoder Inc.
 
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説AtCoder Inc.
 
AtCoder Regular Contest 002
AtCoder Regular Contest 002AtCoder Regular Contest 002
AtCoder Regular Contest 002AtCoder Inc.
 
AtCoder Regular Contest 038 解説
AtCoder Regular Contest 038 解説AtCoder Regular Contest 038 解説
AtCoder Regular Contest 038 解説AtCoder Inc.
 
AtCoder Regular Contest 027 解説
AtCoder Regular Contest 027 解説AtCoder Regular Contest 027 解説
AtCoder Regular Contest 027 解説AtCoder Inc.
 

Mais procurados (20)

AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説
 
AtCoder Regular Contest 040 解説
AtCoder Regular Contest 040 解説AtCoder Regular Contest 040 解説
AtCoder Regular Contest 040 解説
 
CODE FESTIVAL 予選B 解説
CODE FESTIVAL 予選B 解説CODE FESTIVAL 予選B 解説
CODE FESTIVAL 予選B 解説
 
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説
 
AtCoder Regular Contest 036 解説
AtCoder Regular Contest 036 解説AtCoder Regular Contest 036 解説
AtCoder Regular Contest 036 解説
 
AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説
 
Abc009
Abc009Abc009
Abc009
 
AtCoder Beginner Contest 022 解説
AtCoder Beginner Contest 022 解説AtCoder Beginner Contest 022 解説
AtCoder Beginner Contest 022 解説
 
AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説
 
AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説
 
AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説
 
AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説
 
AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説
 
arc047
arc047arc047
arc047
 
abc032
abc032abc032
abc032
 
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説
 
AtCoder Regular Contest 002
AtCoder Regular Contest 002AtCoder Regular Contest 002
AtCoder Regular Contest 002
 
AtCoder Regular Contest 038 解説
AtCoder Regular Contest 038 解説AtCoder Regular Contest 038 解説
AtCoder Regular Contest 038 解説
 
AtCoder Regular Contest 027 解説
AtCoder Regular Contest 027 解説AtCoder Regular Contest 027 解説
AtCoder Regular Contest 027 解説
 

Mais de AtCoder Inc.

AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoder Inc.
 
Square869120 contest #2
Square869120 contest #2Square869120 contest #2
Square869120 contest #2AtCoder Inc.
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Inc.
 
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説AtCoder Inc.
 
Chokudai Contest 001
Chokudai Contest 001Chokudai Contest 001
Chokudai Contest 001AtCoder Inc.
 
AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Inc.
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Inc.
 
AtCoder Regular Contest 048
AtCoder Regular Contest 048AtCoder Regular Contest 048
AtCoder Regular Contest 048AtCoder Inc.
 
MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説AtCoder Inc.
 
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Inc.
 
DDPC 2016 予選 解説
DDPC 2016 予選 解説DDPC 2016 予選 解説
DDPC 2016 予選 解説AtCoder Inc.
 
CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説AtCoder Inc.
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Inc.
 
CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説AtCoder Inc.
 
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説AtCoder Inc.
 
AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説AtCoder Inc.
 
CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説AtCoder Inc.
 
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Inc.
 

Mais de AtCoder Inc. (20)

TCO2017R1
TCO2017R1TCO2017R1
TCO2017R1
 
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組み
 
Square869120 contest #2
Square869120 contest #2Square869120 contest #2
Square869120 contest #2
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
 
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
 
Chokudai Contest 001
Chokudai Contest 001Chokudai Contest 001
Chokudai Contest 001
 
AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
 
AtCoder Regular Contest 048
AtCoder Regular Contest 048AtCoder Regular Contest 048
AtCoder Regular Contest 048
 
MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説
 
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説
 
DDPC 2016 予選 解説
DDPC 2016 予選 解説DDPC 2016 予選 解説
DDPC 2016 予選 解説
 
CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046
 
abc031
abc031abc031
abc031
 
CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説
 
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説
 
AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説
 
CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説
 
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説
 

Último

ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ssusere0a682
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024koheioishi1
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptyuitoakatsukijp
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ssusere0a682
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2Tokyo Institute of Technology
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationYukiTerazawa
 

Último (6)

ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScript
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 

AtCoder Regular Contest 029 解説

  • 1. ARC029 解説 解説スライド担当: 城下慎也(@phidnight)
  • 3. 問題概要 • 2 つの肉焼き器を用いてお肉を焼く。 • 푁 個のお肉を肉焼き器を使って焼く。 • うまく割り当てて、すべてのお肉が焼けるまでの時間を最小化せよ。 • 1 ≦ 푁 ≦ 4
  • 4. 解法 • 全探索をすることで答えることができます。 • お肉をどちらの肉焼き器に割り当てるかという、全部で2푁 ある組み 合わせを試します。 • 割り当てた後、それぞれの肉焼き器が肉を焼くのにかかる時間は、 割り当てられた肉が要求する焼き時間の合計値と同じになります。 • 2 つある合計値のうち大きいほうがその割り当てにおける焼き時間 となります。 • 計算量はO(푁 ∗ 2푁) となります。 • 푁 ≦ 4 なので、満点をとることができます。
  • 5. 備考 • 指数全探索は競技プログラミングでは頻出です。 • 特に、部分点として出やすいので、ぜひとも習得してください! • ちなみに、この問題は、すべてのお肉の焼き時間の合計値を푀とお いたときに、푀/2 以上で最小の部分和を求める問題に帰着すること ができます。 • 上記の帰着により動的計画法でO(푁푀) で解くことができます。
  • 7. 問題概要 • ノートと箱(ともに長方形で考える) が与えられる。 • それぞれの箱について、ノートが入るか否かを判定せよ。 • 1 ≦ 푁 ≦ 5,000 • 1 ≦ 辺の長さ≦ 100,000
  • 8. 幾何の問題 • 幾何の問題は競技プログラミングで出てくることがあります。 • 実数計算とか特有の問題もあるので、慣れておくと良いと思います。 • 角度やベクトル計算(外積、内積) などを知っておくと役立つことがあ ります。
  • 9. 実行できない解法 • すべての角度を試します。 • 「すべての角度」は、数え上げることができません。 • この方針だと、計算が終了しません。
  • 10. 実行できない解法 • すべての角度を試します。 • 「すべての角度」は、数え上げることができません。 • この方針だと、計算が終了しません。 • そのため、計算可能なように探索候補をしぼる必要があります。
  • 11. 危険な解法 • ランダムに角度を決めて置く、という動作を一定回数繰り返し、何回 やってもダメならNO とし、うまく置けたらYES とします。 • 下図のような配置の場合、うまくいく確率がとても低く、NO と行ってし まう確率が高くなります。
  • 12. 考察 • 最初に、すべてを横向きに合わせます。 • 少しずつ回転させていくと、高さが増えていくので、高さが一致したと きのみを試すと斜めのケースも対応できる。
  • 13. 解法 • 縦横に平行なケースを試し、斜めを、高さが一致した場合に限定す ることでそれぞれO(1) で計算することができます。 • 高さが一致する瞬間は、最大値になる角度まで範囲で角度の二分 探索で計算することができます。
  • 15. 問題概要 • グラフが与えられます。 • 頂点に交易所、辺に舗装道を設置して、交易所へ舗装されていない 道路を経由して移動できるようにします。 • 設置と舗装のコストが与えられるので、コストの合計を最小にしてく ださい。 • 1 ≦ 푁(頂点数) ≦ 100,000 • 1 ≦ 푀(辺数) ≦ 200,000
  • 16. 部分点解法1 (10点) • すべての都市、道に対して、操作をするかしないかを決めて、その 決め方でうまくいっているかを試します。 • うまく行っているかの判定は、各都市に対して、その都市の連結成 分に交易所のある都市が入っているかを判定すれば良いです。 • 幅優先探索などを用います。 • 計算量はO(푁 ∗ 푀 ∗ 2푁+푀) などになります。 • Union – find を用いると手早く連結判定はできます。
  • 17. 部分点解法2 (10 + 20点) • すべての都市に対して、操作をするかしないかを決めます。 • 辺を効率的に選択します。
  • 18. 部分点解法2 (10 + 20点) • アイデアとして、交易所のある頂点を1 つにまとめてみる。
  • 19. 部分点解法2 (10 + 20点) • アイデアとして、交易所のある頂点を1 つにまとめてみる。 • すると、全体が1 つの連結成分になることがわかる。
  • 20. 部分点解法2 (10 + 20点) • アイデアとして、交易所のある頂点を1 つにまとめてみる。 • すると、全体が1 つの連結成分になることがわかる。
  • 21. 部分点解法2 (10 + 20点) • 「辺にコストがあって、辺の集合を選び全体を1 つの連結成分にす る選び方のうち、費用の合計値が最小となる選び方を求める問題」 に帰着することができました。 • 上記の問題は、「最小全域木問題」として知られています。 • クラスカル法やプリム法で効率的に計算することができます。 • 交易所の設置方法は全部で2푁 通りあり、すべてについて求めるこ とで答えを求めることができます。 • 注意点として、交易所の設置方法によっては解が存在するとは限り ません(元のグラフで、全体が連結でない場合など)。
  • 22. 部分点解法3 (10 + 20 + 30点) • 最初に、交易所の頂点集合を選ぶ代わりに、仮想的な都市X を用 意します。 • 都市X と都市푖 1 ≦ 푖 ≦ 푁 の間には、コスト푐푖(交易所の設置コスト と一緒) の辺を張ります。 • 都市1 から都市푁 に関しては、交易所を置く代わりに、都市X との 辺を選ぶという操作だと考えます。 X 푐1 푐2 푐3 푐푁 1 2 3 … 푁
  • 23. 部分点解法3 (10 + 20 + 30点) • この処理をしたあと、良い状態であることと、都市X を含めて全体で 連結であることが同値となります。 • このグラフで最小全域木問題を解けば解が得られます。 • 有効な候補は毎回O(N + 푀) 本で、最大O(푁) 回試すので、全体で O(푁(푁 + 푀)) となります。 X 푐1 푐2 푐3 푐푁 1 2 3 … 푁
  • 24. 満点解法 • 先ほどの部分点解法3 で、プリム法やクラスカル法を用いて高速化 すれば満点となります。
  • 26. 問題概要 • 有向木(のおもちゃ)が与えられます。 • 푀個ある各整数を、置くか置かないかをします。 • 木の頂点に置いたら、頂点は親に古い数字を送ります。 • 最終的に残る整数の合計を最大化してください。 • 1 ≦ 푁(頂点数) ≦ 5,000 • 1 ≦ 푀(候補数) ≦ 5,000
  • 27. 部分点解法1 • すべての置き方(置かないを含め)を試します。 • (푁 + 1)푀 通りを試すと答えが得られます。
  • 28. 考察 • 元からある数字について考えます。 • ある数字について、その数字が追い出されるなら、その数字を持っ ていた頂点の先祖となる頂点にあった数字もすべて追い出されてい ます。 • すると、追い出される数字を持っていた頂点の集合は、頂点1 を含 む部分木となっているはずです。 • 逆に部分木(頂点数を푋とする)が決まると、部分木の深いところから 順に푋 回おくだけで部分木のすべての整数を追い出すことができま す。
  • 29. 考察 • この場合、残せる数字は푋個だけです。 • 先ほどの方法だと、おいた数字すべてを残すことができるので、奥 候補の数字から、大きいのを푋個取り出せばよいです。 • すると、頂点1 を根とする部分木の中で頂点数が푋であるものを0 ≦ 푋 ≦ 푁 ですべて求めることで計算できます。
  • 30. 考察+ 満点解法 • この計算は、各頂点x に対して、その頂点x を根する部分木でi 個 選ぶ方法をdp[x][i] とする動的計画法で計算できます。 • この計算は各頂点に対して、子の頂点数がs1,s2,s3, … ,sk である場 合に、O(s1s2 + (s1+s2)s3 + … + (s1+s2+…+s(k-1))sk)となります。 • これは一見N の2 乗に見えますが、(s1+s2+…+sk)^2 より小さいこと がわかるので、頂点1 で考えるとN の2 乗で済みます。