SlideShare a Scribd company logo
1 of 46
Download to read offline
AtCoder Regular Contest 046
解説
AtCoder株式会社
3/19/15
問題 A – ゾロ目数
問題概要
• すべての桁の数字が同じであるような正の整数をゾロ目数と呼ぶ。
• 小さい方から 𝑁 番目のゾロ目数を求めよ。
• 1 ≤ 𝑁 ≤ 50
解法 (1)
• ゾロ目数を列挙してみる。
1, 2, 3, 4, 5, 6, 7, 8, 9,
11, 22, 33, 44, 55, 66, 77, 88, 99,
111, 222, 333, 444, 555, 666, 777, 888, 999, …
• 𝑖 行目の 𝑗 番目のゾロ目数は、数字 𝑗 を 𝑖 回繰り返した数である。
• 数字 (N-1)%9+1 を (N-1)/9+1 回出力すればよい。
解法 (2)
• サンプル 3 を見ると、𝑁 = 50 のゾロ目数は 555555 と小さい。
• 1 から 555555 まで順にゾロ目数か判定しても、間に合う。
解法 (3)
• 𝑁 ≤ 50 と小さい。
• 小さい方から 50 番目までのゾロ目数を、コードに埋め込む。
B: 石取り大作戦
問題概要
• N 個の石を使って石取りゲームを行う
– プレイヤーは交互に 1 個以上の石を取る
– 最後の石を取ったほうの勝利である
• 先手は A 個、後手は B 個まで一度に石を取れる
• 2 人が最適に行動したとき勝利するのはどちらか?
• 制約
– 1 ≦ N ≦ 109
– 1 ≦ A, B ≦ 109
考察
• N ≦ A のとき
– 先手が全ての石を取れば勝利
– 先手必勝
• N > A のとき
– A = B のとき
• ?
– A ≠ B のとき
• ?
(1) N > A かつ A = B のとき
• N = A + 1 のときを考える (サンプル 2 参照)
– 先手がどのように石を取っても必ず後手が勝つ
– 後手必勝
• N を A + 1 で割ったあまりが 0 のとき、後手必勝
– 先手がどのように石を取っても、後手は石の数を A + 1 で
割ったあまりが 0 となるように石を取り続けることが可能
– 後手はいずれ最後の石を取り勝利する
• N を A + 1 で割ったあまりが 0 以外のときは?
(1) N > A かつ A = B のとき
• N を A + 1で割ったあまりが 0 以外のときは?
– 石の数を A + 1 で割ったあまりが 0 になるように取ると、
後手必勝の状況を相手に押しつけられる
– よって先手必勝
(2) N > A かつ A ≠ B のとき
• A > B のときを考える
– 直感的には先手が有利そう
– この直感は正しく先手必勝
• 証明
– N > A のときを考える
– 先手が 1 個の石を取ったとき、後手がどのように石を
取ったとしても再び先手の手番が訪れる
• N – 1 > A – 1 ≧ B より明らか
– いずれ N ≦ A の盤面で先手の手番が訪れるので先手必勝
(2) N > A かつ A ≠ B のとき
• A < B のときを考える
– こちらの場合には後手必勝
• 証明
– 先手がどのように石を取っても後手の手番が訪れる
– このとき残りの石の数 N について N ≦ B ならば後手の勝利
– N > B のとき、後手が 1 個の石を取ったとき、先手が
どのように石を取ったとしても再び後手の手番が訪れる
– いずれ N ≦ B の盤面で後手の手番が訪れるので後手必勝
まとめ
• N ≦ A のとき
– 先手必勝
• N > A のとき
– A = B のとき
• N を A + 1 で割ったあまりが 0 以外: 先手必勝
• それ以外: 後手必勝
– A ≠ B のとき
• A > B : 先手必勝
• A < B : 後手必勝
いずれの場合も O(1) で判定可能
C: 合コン大作戦
問題概要
• N 人の男性と M 人の女性がいる
• i 番目の男性は整数 Ai , Bi を持つ
• j 番目の女性は整数 Cj , Dj を持つ
• Dj ≦ Ai かつ Bi ≦ Cj となるペアの数を最大化せよ
– ただし,それぞれの人は複数のペアに所属してはならない
• 制約
– 1 ≦ N, M ≦ 150,000
– 1 ≦ Ai , Bi , Cj , Dj ≦ 109
考察
• この問題は二部グラフの最大マッチング問題
– 最大流を求めるアルゴリズムで解くことができるが…
• 今回は頂点数,辺の数ともに大きく間に合わない
• 問題で与えられた制約や性質をうまく利用することを考える
1
2
3
1
2
3
4サンプル 2
部分点 (30 点)
• 任意の i, j ( 1 ≦ i ≦ N, 1 ≦ j ≦ M) で Bi ≦ Cj が成立
– 任意の男性の要求を全ての女性が満たす
• 各女性について要求を満たす男性がいるか知りたい
– Ai, Dj にのみ着目すればよい
– Ai, Dj で男女それぞれをソートする
部分点 (30 点)
• サンプル 2 についてAi, Djで昇順にソートすると…
• Dj が小さい女性から順に、まだペアを組んでいない
Dj ≦ Ai を満たす Ai が最小の男性とのペアを貪欲に
成立させていくのが最適だと分かる
2
1
3
2
1
4
3サンプル 2
部分点解法 (30 点)
• Dj が小さい女性から順に、先述の条件を満たす男性
と貪欲にマッチングを行えばよい
• 愚直に毎回調べると O(NM) となって間に合わないが
しゃくとり法を用いるとO(N + M) で実現できる
• 計算量はソート部分が最も重く O(N logN + M logM)
満点 (100 点)
• 今度は Bi > Cj であるようなケースが存在する
– Ai , Dj に関する単純な貪欲法ではうまくいかない
• 突然だが、部分点解法を以下のように言い換える
– 集合 S がある。 S ははじめ空集合である
– 以下の N + M 個の 2 種類のクエリに答えよ
• S に要素を 1 つ追加する
• S から要素を 1 つ取り除く。 S が空集合ならば何もしない
– 要素の追加はマッチングを待っている女性の追加を、
要素の削除は男性とのマッチングを成立させるのに対応
– S から要素を取り除くのに成功した回数が求める答え
満点 (100 点)
• 満点の状況に対応するようさらに言い換える
– 多重集合 S がある。 S ははじめ空集合である
– 以下の N + M 個の 2 種類のクエリに答えよ
• S に Cj を 1 つ追加する
• S から Bi 以上の要素を 1 つ取り除く。 S に条件を満たすものが
存在しないならば、何もしない
– 要素の追加はマッチングを待っている女性の追加を、
要素の削除は男性とのマッチングを成立させるのに対応
– S から要素を取り除くのに成功した回数が求める答え
– 削除する要素はどのように選ぶのが最適か?
• 条件を満たすような最小の要素を選ぶのが最適
満点解法 (100 点)
• この問題は最終的に以下の問題に帰着できる
– 多重集合 S がある。 S ははじめ空集合である
– 以下の N + M 個の 2 種類のクエリに答えよ
• S に Cj を 1 つ追加する
• S から Bi 以上の最小の要素を 1 つ取り除く。 S に条件を
満たすものが存在しないならば、何もしない
– S から要素を取り除くのに成功した回数が求める答え
• 上記のクエリをmultisetを用いて処理してやればよい
– multisetが標準ライブラリに存在しない場合でも、
セグメント木、Fenwick Tree、平方分割などのデータ構造を
用いて解くことが可能
• 全体の計算量は O((N + M)log(N + M))
問題 D – うさぎとマス目
問題概要
• 𝐻 行、𝑊 列のマス目がある。
• 最初、 0, 0 にうさぎがいる。
• うさぎは 𝑖, 𝑗 から ( 𝑖 + 1 %𝐻, 𝑗) または (𝑖, 𝑗 + 1 %𝑊) へ移動できる。
• うさぎがすべてのマスをちょうど 1 回ずつ訪れ、 0, 0 へ戻ってくる方法
は何通りか?
例(サンプル 1)
• 𝐻 = 2,𝑊 = 2
→ 2 通り
例(サンプル 2)
• 𝐻 = 6,𝑊 = 3
→ 3 通り
考察 (1)
• 仮に、マス ① から → へ移動するとする。
考察 (1)
• マス ② を訪れるためには、マス ③ から → へ移動しなければならない。
考察 (1)
• 連鎖的に、→ へ移動しなければならないマスが決まっていく。
考察 (1)
• 仮に、マス ① から ↓ へ移動するとする。
考察 (1)
• マス ② を訪れるためには、マス ③ から ↓ へ移動しなければならない。
考察 (1)
• 連鎖的に、↓ へ移動しなければならないマスが決まっていく。
考察 (1)
• 結局、青のレーンはすべて同じ向きへ移動しなければならない。
考察 (1)
• 同様に、赤や緑のレーンはすべて同じ向きへ移動しなければならない。
• ここで、レーンの本数 𝑑 は 𝑑 = GCD 𝐻, 𝑊 と計算できる。
考察 (1)
• 最初の 𝑑 歩の向きを決めると、
考察 (1)
• 最初の 𝑑 歩の向きを決めると、全体の向きが一意に決まる。
• しかも、最初の 𝑑 歩の繰り返しになっている!
考察 (1)
• 「すべてのマスをちょうど 1 回ずつ訪れ、 0, 0 へ戻ってくる」ためには、
「最初の 𝑑 歩を繰り返す」ことが必要条件。
考察 (2)
• しかし、「最初の 𝑑 歩を繰り返す」ことは必要十分条件ではない。
• 先の例は、すべてのマスを訪れる前に 0, 0 へ戻ってしまっている。
考察 (2)
• 最初の 𝑑 歩を全通り試し、すべてのマスを訪れているか個別に
チェックする?
→ 最初の 𝑑 歩は 2 𝑑 通りもあるので、TLE してしまう。
考察 (2)
• 「最初の 𝑑 歩の行き先」は 𝑑 + 1 通りしかないので、全通り試せる。
• 最初の 𝑑 歩をまとめて、紫の矢印で表す。
考察 (2)
• 紫の矢印は 𝑑 歩分なので、紫の矢印を
𝐻𝑊
𝑑
回繰り返して 0, 0 へ
戻ってくれば、すべてのマスを訪れたことになる。
考察 (2)
• OK の例
考察 (2)
• NG の例
考察 (2)
• 紫の矢印を何回繰り返すと 0, 0 へ戻ってくるか?
• 紫の矢印が右へ 𝑥 マス、下へ 𝑦 マス移動するとする。
(ただし、𝑥 + 𝑦 = 𝑑)
• 紫の矢印の横方向の周期は
W
GCD 𝑊,𝑥
• 紫の矢印の縦方向の周期は
H
GCD 𝐻,𝑦
• よって、紫の矢印が 0, 0 へ戻ってくるまでの周期は
LCM
W
GCD 𝑊, 𝑥
,
H
GCD 𝐻, 𝑦
解法
• 𝑑 = GCD(𝐻, 𝑊) を計算する。
• 𝑥 ≥ 0,𝑦 ≥ 0,𝑥 + 𝑦 = 𝑑 を満たす 𝑥, 𝑦 の組を全探索する。
• 各 𝑥, 𝑦 の組に対して、
LCM
W
GCD 𝑊, 𝑥
,
H
GCD 𝐻, 𝑦
=
𝐻𝑊
𝑑
ならば、 𝑥+𝑦
𝑥
を答えに足す。
• 計算量は O 𝑑 log 𝑑

More Related Content

What's hot

AtCoder Regular Contest 030 解説
AtCoder Regular Contest 030 解説AtCoder Regular Contest 030 解説
AtCoder Regular Contest 030 解説AtCoder Inc.
 
AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説AtCoder Inc.
 
AtCoder Regular Contest 043 解説
AtCoder Regular Contest 043 解説AtCoder Regular Contest 043 解説
AtCoder Regular Contest 043 解説AtCoder Inc.
 
AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Inc.
 
DDPC 2016 予選 解説
DDPC 2016 予選 解説DDPC 2016 予選 解説
DDPC 2016 予選 解説AtCoder Inc.
 
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Inc.
 
AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説AtCoder Inc.
 
AtCoder Beginner Contest 016 解説
AtCoder Beginner Contest 016 解説AtCoder Beginner Contest 016 解説
AtCoder Beginner Contest 016 解説AtCoder Inc.
 
CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説AtCoder Inc.
 
AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説AtCoder Inc.
 
AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説AtCoder Inc.
 
AtCoder Regular Contest 020 解説
AtCoder Regular Contest 020 解説AtCoder Regular Contest 020 解説
AtCoder Regular Contest 020 解説AtCoder Inc.
 
AtCoder Regular Contest 034 解説
AtCoder Regular Contest 034 解説AtCoder Regular Contest 034 解説
AtCoder Regular Contest 034 解説AtCoder Inc.
 
AtCoder Regular Contest 018 解説
AtCoder Regular Contest 018 解説AtCoder Regular Contest 018 解説
AtCoder Regular Contest 018 解説AtCoder Inc.
 
AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Inc.
 
AtCoder Beginner Contest 019 解説
AtCoder Beginner Contest 019 解説AtCoder Beginner Contest 019 解説
AtCoder Beginner Contest 019 解説AtCoder Inc.
 
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Inc.
 
AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説AtCoder Inc.
 

What's hot (20)

AtCoder Regular Contest 030 解説
AtCoder Regular Contest 030 解説AtCoder Regular Contest 030 解説
AtCoder Regular Contest 030 解説
 
AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説
 
Abc009
Abc009Abc009
Abc009
 
AtCoder Regular Contest 043 解説
AtCoder Regular Contest 043 解説AtCoder Regular Contest 043 解説
AtCoder Regular Contest 043 解説
 
AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説
 
DDPC 2016 予選 解説
DDPC 2016 予選 解説DDPC 2016 予選 解説
DDPC 2016 予選 解説
 
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説
 
AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説
 
AtCoder Beginner Contest 016 解説
AtCoder Beginner Contest 016 解説AtCoder Beginner Contest 016 解説
AtCoder Beginner Contest 016 解説
 
CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説
 
AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説
 
abc032
abc032abc032
abc032
 
AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説
 
AtCoder Regular Contest 020 解説
AtCoder Regular Contest 020 解説AtCoder Regular Contest 020 解説
AtCoder Regular Contest 020 解説
 
AtCoder Regular Contest 034 解説
AtCoder Regular Contest 034 解説AtCoder Regular Contest 034 解説
AtCoder Regular Contest 034 解説
 
AtCoder Regular Contest 018 解説
AtCoder Regular Contest 018 解説AtCoder Regular Contest 018 解説
AtCoder Regular Contest 018 解説
 
AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説
 
AtCoder Beginner Contest 019 解説
AtCoder Beginner Contest 019 解説AtCoder Beginner Contest 019 解説
AtCoder Beginner Contest 019 解説
 
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説
 
AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説
 

Viewers also liked

AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説AtCoder Inc.
 
AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Inc.
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Inc.
 
天下一プログラマーコンテスト2015 予選B 解説
天下一プログラマーコンテスト2015 予選B 解説天下一プログラマーコンテスト2015 予選B 解説
天下一プログラマーコンテスト2015 予選B 解説AtCoder Inc.
 
AtCoder Regular Contest 002
AtCoder Regular Contest 002AtCoder Regular Contest 002
AtCoder Regular Contest 002AtCoder Inc.
 
AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説AtCoder Inc.
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みMasahiro Sakai
 
深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶしAtCoder Inc.
 
高速フーリエ変換
高速フーリエ変換高速フーリエ変換
高速フーリエ変換AtCoder Inc.
 
AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説AtCoder Inc.
 
AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説AtCoder Inc.
 
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Inc.
 
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Inc.
 

Viewers also liked (15)

AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説
 
AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説
 
abc031
abc031abc031
abc031
 
C pub
C pubC pub
C pub
 
天下一プログラマーコンテスト2015 予選B 解説
天下一プログラマーコンテスト2015 予選B 解説天下一プログラマーコンテスト2015 予選B 解説
天下一プログラマーコンテスト2015 予選B 解説
 
AtCoder Regular Contest 002
AtCoder Regular Contest 002AtCoder Regular Contest 002
AtCoder Regular Contest 002
 
AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし
 
高速フーリエ変換
高速フーリエ変換高速フーリエ変換
高速フーリエ変換
 
AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説
 
AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説
 
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説
 
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説
 

Similar to AtCoder Regular Contest 046

CODE THANKS FESTIVAL 2014 A日程 解説
CODE THANKS FESTIVAL 2014 A日程 解説CODE THANKS FESTIVAL 2014 A日程 解説
CODE THANKS FESTIVAL 2014 A日程 解説AtCoder Inc.
 
CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説AtCoder Inc.
 
AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説AtCoder Inc.
 
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説AtCoder Inc.
 
AtCoder Regular Contest 017
AtCoder Regular Contest 017AtCoder Regular Contest 017
AtCoder Regular Contest 017AtCoder Inc.
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムTakuya Akiba
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Inc.
 
Machine Learning Seminar (1)
Machine Learning Seminar (1)Machine Learning Seminar (1)
Machine Learning Seminar (1)Tomoya Nakayama
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Inc.
 
AtCoder Regular Contest 019 解説
AtCoder Regular Contest 019 解説AtCoder Regular Contest 019 解説
AtCoder Regular Contest 019 解説AtCoder Inc.
 
At coder regular contest 013 解説
At coder regular contest 013 解説At coder regular contest 013 解説
At coder regular contest 013 解説光喜 濱屋
 
Indeedなう 予選B 解説
Indeedなう 予選B 解説Indeedなう 予選B 解説
Indeedなう 予選B 解説AtCoder Inc.
 
Atcoder Regular Contest 014 解説
Atcoder Regular Contest 014 解説Atcoder Regular Contest 014 解説
Atcoder Regular Contest 014 解説光喜 濱屋
 
UTPC2012 - E
UTPC2012 - EUTPC2012 - E
UTPC2012 - Eomeometo
 
130323 slide all
130323 slide all130323 slide all
130323 slide allikea0064
 
K2PC Div1 E 暗号化
K2PC Div1 E 暗号化K2PC Div1 E 暗号化
K2PC Div1 E 暗号化Kazuma Mikami
 
Npc april fool2014
Npc april fool2014Npc april fool2014
Npc april fool2014Ken Ogura
 
Code Formula 2014 予選A 解説
Code Formula 2014 予選A 解説Code Formula 2014 予選A 解説
Code Formula 2014 予選A 解説AtCoder Inc.
 

Similar to AtCoder Regular Contest 046 (20)

CODE THANKS FESTIVAL 2014 A日程 解説
CODE THANKS FESTIVAL 2014 A日程 解説CODE THANKS FESTIVAL 2014 A日程 解説
CODE THANKS FESTIVAL 2014 A日程 解説
 
CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説
 
Arc041
Arc041Arc041
Arc041
 
AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説
 
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説
 
AtCoder Regular Contest 017
AtCoder Regular Contest 017AtCoder Regular Contest 017
AtCoder Regular Contest 017
 
Aizu-2017: B
Aizu-2017: BAizu-2017: B
Aizu-2017: B
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
 
Machine Learning Seminar (1)
Machine Learning Seminar (1)Machine Learning Seminar (1)
Machine Learning Seminar (1)
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
 
AtCoder Regular Contest 019 解説
AtCoder Regular Contest 019 解説AtCoder Regular Contest 019 解説
AtCoder Regular Contest 019 解説
 
At coder regular contest 013 解説
At coder regular contest 013 解説At coder regular contest 013 解説
At coder regular contest 013 解説
 
Indeedなう 予選B 解説
Indeedなう 予選B 解説Indeedなう 予選B 解説
Indeedなう 予選B 解説
 
Atcoder Regular Contest 014 解説
Atcoder Regular Contest 014 解説Atcoder Regular Contest 014 解説
Atcoder Regular Contest 014 解説
 
UTPC2012 - E
UTPC2012 - EUTPC2012 - E
UTPC2012 - E
 
130323 slide all
130323 slide all130323 slide all
130323 slide all
 
K2PC Div1 E 暗号化
K2PC Div1 E 暗号化K2PC Div1 E 暗号化
K2PC Div1 E 暗号化
 
Npc april fool2014
Npc april fool2014Npc april fool2014
Npc april fool2014
 
Code Formula 2014 予選A 解説
Code Formula 2014 予選A 解説Code Formula 2014 予選A 解説
Code Formula 2014 予選A 解説
 

More from AtCoder Inc.

AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoder Inc.
 
Square869120 contest #2
Square869120 contest #2Square869120 contest #2
Square869120 contest #2AtCoder 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 048
AtCoder Regular Contest 048AtCoder Regular Contest 048
AtCoder Regular Contest 048AtCoder Inc.
 
MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説AtCoder Inc.
 
CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説AtCoder Inc.
 
CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説AtCoder Inc.
 
天下一プログラマーコンテスト2015 予選A E問題 解説
天下一プログラマーコンテスト2015 予選A E問題 解説天下一プログラマーコンテスト2015 予選A E問題 解説
天下一プログラマーコンテスト2015 予選A E問題 解説AtCoder Inc.
 
AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説AtCoder Inc.
 

More from AtCoder Inc. (11)

TCO2017R1
TCO2017R1TCO2017R1
TCO2017R1
 
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組み
 
Square869120 contest #2
Square869120 contest #2Square869120 contest #2
Square869120 contest #2
 
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 048
AtCoder Regular Contest 048AtCoder Regular Contest 048
AtCoder Regular Contest 048
 
MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説
 
CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説
 
CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説
 
天下一プログラマーコンテスト2015 予選A E問題 解説
天下一プログラマーコンテスト2015 予選A E問題 解説天下一プログラマーコンテスト2015 予選A E問題 解説
天下一プログラマーコンテスト2015 予選A E問題 解説
 
AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説
 

Recently uploaded

リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドリアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドKen Fukui
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」inspirehighstaff03
 
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」inspirehighstaff03
 
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」inspirehighstaff03
 
What I did before opening my business..pdf
What I did before opening my business..pdfWhat I did before opening my business..pdf
What I did before opening my business..pdfoganekyokoi
 
My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」inspirehighstaff03
 
Divorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdfDivorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdfoganekyokoi
 
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」inspirehighstaff03
 
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」inspirehighstaff03
 
My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」inspirehighstaff03
 
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfMy Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfinspirehighstaff03
 
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドリアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドKen Fukui
 
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」inspirehighstaff03
 
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」inspirehighstaff03
 
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」inspirehighstaff03
 
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドリアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドKen Fukui
 
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」inspirehighstaff03
 
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドリアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドKen Fukui
 
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」inspirehighstaff03
 
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slidessusere0a682
 

Recently uploaded (20)

リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドリアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」
 
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
 
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」
 
What I did before opening my business..pdf
What I did before opening my business..pdfWhat I did before opening my business..pdf
What I did before opening my business..pdf
 
My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」
 
Divorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdfDivorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdf
 
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
 
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」
 
My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」
 
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfMy Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
 
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドリアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
 
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
 
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
 
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
 
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドリアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
 
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
 
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドリアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
 
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
 
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
 

AtCoder Regular Contest 046

  • 1. AtCoder Regular Contest 046 解説 AtCoder株式会社 3/19/15
  • 2. 問題 A – ゾロ目数
  • 4. 解法 (1) • ゾロ目数を列挙してみる。 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 111, 222, 333, 444, 555, 666, 777, 888, 999, … • 𝑖 行目の 𝑗 番目のゾロ目数は、数字 𝑗 を 𝑖 回繰り返した数である。 • 数字 (N-1)%9+1 を (N-1)/9+1 回出力すればよい。
  • 5. 解法 (2) • サンプル 3 を見ると、𝑁 = 50 のゾロ目数は 555555 と小さい。 • 1 から 555555 まで順にゾロ目数か判定しても、間に合う。
  • 6. 解法 (3) • 𝑁 ≤ 50 と小さい。 • 小さい方から 50 番目までのゾロ目数を、コードに埋め込む。
  • 8. 問題概要 • N 個の石を使って石取りゲームを行う – プレイヤーは交互に 1 個以上の石を取る – 最後の石を取ったほうの勝利である • 先手は A 個、後手は B 個まで一度に石を取れる • 2 人が最適に行動したとき勝利するのはどちらか? • 制約 – 1 ≦ N ≦ 109 – 1 ≦ A, B ≦ 109
  • 9. 考察 • N ≦ A のとき – 先手が全ての石を取れば勝利 – 先手必勝 • N > A のとき – A = B のとき • ? – A ≠ B のとき • ?
  • 10. (1) N > A かつ A = B のとき • N = A + 1 のときを考える (サンプル 2 参照) – 先手がどのように石を取っても必ず後手が勝つ – 後手必勝 • N を A + 1 で割ったあまりが 0 のとき、後手必勝 – 先手がどのように石を取っても、後手は石の数を A + 1 で 割ったあまりが 0 となるように石を取り続けることが可能 – 後手はいずれ最後の石を取り勝利する • N を A + 1 で割ったあまりが 0 以外のときは?
  • 11. (1) N > A かつ A = B のとき • N を A + 1で割ったあまりが 0 以外のときは? – 石の数を A + 1 で割ったあまりが 0 になるように取ると、 後手必勝の状況を相手に押しつけられる – よって先手必勝
  • 12. (2) N > A かつ A ≠ B のとき • A > B のときを考える – 直感的には先手が有利そう – この直感は正しく先手必勝 • 証明 – N > A のときを考える – 先手が 1 個の石を取ったとき、後手がどのように石を 取ったとしても再び先手の手番が訪れる • N – 1 > A – 1 ≧ B より明らか – いずれ N ≦ A の盤面で先手の手番が訪れるので先手必勝
  • 13. (2) N > A かつ A ≠ B のとき • A < B のときを考える – こちらの場合には後手必勝 • 証明 – 先手がどのように石を取っても後手の手番が訪れる – このとき残りの石の数 N について N ≦ B ならば後手の勝利 – N > B のとき、後手が 1 個の石を取ったとき、先手が どのように石を取ったとしても再び後手の手番が訪れる – いずれ N ≦ B の盤面で後手の手番が訪れるので後手必勝
  • 14. まとめ • N ≦ A のとき – 先手必勝 • N > A のとき – A = B のとき • N を A + 1 で割ったあまりが 0 以外: 先手必勝 • それ以外: 後手必勝 – A ≠ B のとき • A > B : 先手必勝 • A < B : 後手必勝 いずれの場合も O(1) で判定可能
  • 16. 問題概要 • N 人の男性と M 人の女性がいる • i 番目の男性は整数 Ai , Bi を持つ • j 番目の女性は整数 Cj , Dj を持つ • Dj ≦ Ai かつ Bi ≦ Cj となるペアの数を最大化せよ – ただし,それぞれの人は複数のペアに所属してはならない • 制約 – 1 ≦ N, M ≦ 150,000 – 1 ≦ Ai , Bi , Cj , Dj ≦ 109
  • 17. 考察 • この問題は二部グラフの最大マッチング問題 – 最大流を求めるアルゴリズムで解くことができるが… • 今回は頂点数,辺の数ともに大きく間に合わない • 問題で与えられた制約や性質をうまく利用することを考える 1 2 3 1 2 3 4サンプル 2
  • 18. 部分点 (30 点) • 任意の i, j ( 1 ≦ i ≦ N, 1 ≦ j ≦ M) で Bi ≦ Cj が成立 – 任意の男性の要求を全ての女性が満たす • 各女性について要求を満たす男性がいるか知りたい – Ai, Dj にのみ着目すればよい – Ai, Dj で男女それぞれをソートする
  • 19. 部分点 (30 点) • サンプル 2 についてAi, Djで昇順にソートすると… • Dj が小さい女性から順に、まだペアを組んでいない Dj ≦ Ai を満たす Ai が最小の男性とのペアを貪欲に 成立させていくのが最適だと分かる 2 1 3 2 1 4 3サンプル 2
  • 20. 部分点解法 (30 点) • Dj が小さい女性から順に、先述の条件を満たす男性 と貪欲にマッチングを行えばよい • 愚直に毎回調べると O(NM) となって間に合わないが しゃくとり法を用いるとO(N + M) で実現できる • 計算量はソート部分が最も重く O(N logN + M logM)
  • 21. 満点 (100 点) • 今度は Bi > Cj であるようなケースが存在する – Ai , Dj に関する単純な貪欲法ではうまくいかない • 突然だが、部分点解法を以下のように言い換える – 集合 S がある。 S ははじめ空集合である – 以下の N + M 個の 2 種類のクエリに答えよ • S に要素を 1 つ追加する • S から要素を 1 つ取り除く。 S が空集合ならば何もしない – 要素の追加はマッチングを待っている女性の追加を、 要素の削除は男性とのマッチングを成立させるのに対応 – S から要素を取り除くのに成功した回数が求める答え
  • 22. 満点 (100 点) • 満点の状況に対応するようさらに言い換える – 多重集合 S がある。 S ははじめ空集合である – 以下の N + M 個の 2 種類のクエリに答えよ • S に Cj を 1 つ追加する • S から Bi 以上の要素を 1 つ取り除く。 S に条件を満たすものが 存在しないならば、何もしない – 要素の追加はマッチングを待っている女性の追加を、 要素の削除は男性とのマッチングを成立させるのに対応 – S から要素を取り除くのに成功した回数が求める答え – 削除する要素はどのように選ぶのが最適か? • 条件を満たすような最小の要素を選ぶのが最適
  • 23. 満点解法 (100 点) • この問題は最終的に以下の問題に帰着できる – 多重集合 S がある。 S ははじめ空集合である – 以下の N + M 個の 2 種類のクエリに答えよ • S に Cj を 1 つ追加する • S から Bi 以上の最小の要素を 1 つ取り除く。 S に条件を 満たすものが存在しないならば、何もしない – S から要素を取り除くのに成功した回数が求める答え • 上記のクエリをmultisetを用いて処理してやればよい – multisetが標準ライブラリに存在しない場合でも、 セグメント木、Fenwick Tree、平方分割などのデータ構造を 用いて解くことが可能 • 全体の計算量は O((N + M)log(N + M))
  • 24. 問題 D – うさぎとマス目
  • 25. 問題概要 • 𝐻 行、𝑊 列のマス目がある。 • 最初、 0, 0 にうさぎがいる。 • うさぎは 𝑖, 𝑗 から ( 𝑖 + 1 %𝐻, 𝑗) または (𝑖, 𝑗 + 1 %𝑊) へ移動できる。 • うさぎがすべてのマスをちょうど 1 回ずつ訪れ、 0, 0 へ戻ってくる方法 は何通りか?
  • 26. 例(サンプル 1) • 𝐻 = 2,𝑊 = 2 → 2 通り
  • 27. 例(サンプル 2) • 𝐻 = 6,𝑊 = 3 → 3 通り
  • 28. 考察 (1) • 仮に、マス ① から → へ移動するとする。
  • 29. 考察 (1) • マス ② を訪れるためには、マス ③ から → へ移動しなければならない。
  • 30. 考察 (1) • 連鎖的に、→ へ移動しなければならないマスが決まっていく。
  • 31. 考察 (1) • 仮に、マス ① から ↓ へ移動するとする。
  • 32. 考察 (1) • マス ② を訪れるためには、マス ③ から ↓ へ移動しなければならない。
  • 33. 考察 (1) • 連鎖的に、↓ へ移動しなければならないマスが決まっていく。
  • 35. 考察 (1) • 同様に、赤や緑のレーンはすべて同じ向きへ移動しなければならない。 • ここで、レーンの本数 𝑑 は 𝑑 = GCD 𝐻, 𝑊 と計算できる。
  • 36. 考察 (1) • 最初の 𝑑 歩の向きを決めると、
  • 37. 考察 (1) • 最初の 𝑑 歩の向きを決めると、全体の向きが一意に決まる。 • しかも、最初の 𝑑 歩の繰り返しになっている!
  • 38. 考察 (1) • 「すべてのマスをちょうど 1 回ずつ訪れ、 0, 0 へ戻ってくる」ためには、 「最初の 𝑑 歩を繰り返す」ことが必要条件。
  • 39. 考察 (2) • しかし、「最初の 𝑑 歩を繰り返す」ことは必要十分条件ではない。 • 先の例は、すべてのマスを訪れる前に 0, 0 へ戻ってしまっている。
  • 40. 考察 (2) • 最初の 𝑑 歩を全通り試し、すべてのマスを訪れているか個別に チェックする? → 最初の 𝑑 歩は 2 𝑑 通りもあるので、TLE してしまう。
  • 41. 考察 (2) • 「最初の 𝑑 歩の行き先」は 𝑑 + 1 通りしかないので、全通り試せる。 • 最初の 𝑑 歩をまとめて、紫の矢印で表す。
  • 42. 考察 (2) • 紫の矢印は 𝑑 歩分なので、紫の矢印を 𝐻𝑊 𝑑 回繰り返して 0, 0 へ 戻ってくれば、すべてのマスを訪れたことになる。
  • 45. 考察 (2) • 紫の矢印を何回繰り返すと 0, 0 へ戻ってくるか? • 紫の矢印が右へ 𝑥 マス、下へ 𝑦 マス移動するとする。 (ただし、𝑥 + 𝑦 = 𝑑) • 紫の矢印の横方向の周期は W GCD 𝑊,𝑥 • 紫の矢印の縦方向の周期は H GCD 𝐻,𝑦 • よって、紫の矢印が 0, 0 へ戻ってくるまでの周期は LCM W GCD 𝑊, 𝑥 , H GCD 𝐻, 𝑦
  • 46. 解法 • 𝑑 = GCD(𝐻, 𝑊) を計算する。 • 𝑥 ≥ 0,𝑦 ≥ 0,𝑥 + 𝑦 = 𝑑 を満たす 𝑥, 𝑦 の組を全探索する。 • 各 𝑥, 𝑦 の組に対して、 LCM W GCD 𝑊, 𝑥 , H GCD 𝐻, 𝑦 = 𝐻𝑊 𝑑 ならば、 𝑥+𝑦 𝑥 を答えに足す。 • 計算量は O 𝑑 log 𝑑