20
日本情報オリンピック旗 JOI Flag 今西 健介 @japlj

日本情報オリンピック旗(JOI Flag) 解説

Embed Size (px)

Citation preview

Page 1: 日本情報オリンピック旗(JOI Flag) 解説

日本情報オリンピック旗  JOI  Flag 今西 健介  @japlj

Page 2: 日本情報オリンピック旗(JOI Flag) 解説

問題 l 再帰的に定義された  JOI  旗  

l  4つに分割して  J,  O,  I,  JOI旗  

l 大きさ 2K × 2K のマス目  l あからじめ N  マスが埋まっている  

l  1 ≦ K ≦ 30, 1 ≦ N ≦ 1 000

l 正しいJOI旗に修正する最小コストは?

Page 3: 日本情報オリンピック旗(JOI Flag) 解説

基本的な考え方  

JOI旗は再帰的に定義されている  (レベルKの旗はレベルK-1の旗を含む)  

Page 4: 日本情報オリンピック旗(JOI Flag) 解説

基本的な考え方  

JOI旗は再帰的に定義されている  (レベルKの旗はレベルK-1の旗を含む)  

↓  定義通りに4つに分割して  再帰的に答を計算できる

Page 5: 日本情報オリンピック旗(JOI Flag) 解説

簡単な場合 l マス目を  J  (または  O,  I)  のみで埋める場合  

l さすがに簡単  

l たとえば  J  のみで埋めるなら  O  と  I  の個数を数えれば良い  l 数え方はあとで  

Page 6: 日本情報オリンピック旗(JOI Flag) 解説

40%解法 その1 l 実際に 2K × 2K ぶんのメモリをとる  

l 空間計算量 O(4K)

l 文字を数えるときは実際に  マス目を見ていけばよい  l 時間計算量 O(K 4K)

Page 7: 日本情報オリンピック旗(JOI Flag) 解説

40%解法 その2 l さすがに無駄が多すぎ  

l 初めから埋まっているマスは 1 000  個以下  l 文字の数え上げは O(N) でできる  

l それでも40点  l 必要な再帰呼び出しの回数は O(4K)  回

Page 8: 日本情報オリンピック旗(JOI Flag) 解説

100%解法 その1 l マス目の個数に比べて N  は小さい!  

l  4K ≦ 430 = 1 152 921 504 606 846 976 l  N ≦ 1 000 l スカスカ  

l 初めから埋まっているマスが無ければ  修正に必要なコストは明らかに 0 l 再帰呼び出しが枝刈りできる!  

Page 9: 日本情報オリンピック旗(JOI Flag) 解説

100%解法 その2 l 枝を刈ると O(KN)  回の再帰呼び出し  

l 各マスが影響を与える再帰呼び出しは K  個  

l 文字を O(N)  で数えると全体で O(KN2) l  KN2 ≦ 3×107

l  1.5秒あれば間に合う

Page 10: 日本情報オリンピック旗(JOI Flag) 解説

おまけ l 数え方によってはもっと効率良くなる  

l 全体で O(KN + N2) l 全体で O(KN)

Page 11: 日本情報オリンピック旗(JOI Flag) 解説

得点分布

0  

2  

4  

6  

8  

10  

12  

0   10   20   30   40   50   60   70   80   90   100  

Page 12: 日本情報オリンピック旗(JOI Flag) 解説

ところで

Page 13: 日本情報オリンピック旗(JOI Flag) 解説

競技1日目を終えて l 競技初日が終わりました  

l 結果はどうあれまだ3日あります  l 点数にしてまだ 900  点もあります  l 諦めてはいけない(戒め)  

 l 残り3日で実力を最大限発揮するために  競技上の注意があります  

Page 14: 日本情報オリンピック旗(JOI Flag) 解説

問題を読む •  問題は全部読みましょう

– 難易度順に並んでいるとは限らない – 「簡単な問題を読んでいなかった」は痛い

•  Overview Sheet もちゃんと見ましょう – 時間制限やメモリ制限から問題の雰囲気を察することができるかもしれない?

Page 15: 日本情報オリンピック旗(JOI Flag) 解説

アルゴリズム •  明記された部分点に頼る

– 得点になる – 部分点のアルゴリズムがヒントになる – 入力のどのパラメータが重要か

•  明記された部分点に頼りすぎない – 実装時間との兼ね合い – 小さいサイズだと可能な操作が多い

• 自然な部分点解法がわからないまま満点解法がわかってしまう,なんてことも

Page 16: 日本情報オリンピック旗(JOI Flag) 解説

得点分布(再掲)

0  

2  

4  

6  

8  

10  

12  

0   10   20   30   40   50   60   70   80   90   100  

Page 17: 日本情報オリンピック旗(JOI Flag) 解説

フィードバックについて l この問題は完全フィードバックでした  

l 提出したら点数まるわかり  l バグっててもデバッグし放題(?)  

l 【重要】完全フィードバックがある問題は  

Page 18: 日本情報オリンピック旗(JOI Flag) 解説

フィードバックについて l この問題は完全フィードバックでした  

l 提出したら点数まるわかり  l バグっててもデバッグし放題(?)  

l 【重要】完全フィードバックがある問題は  

簡単  (少なくともその日の問題セットの中では)  

Page 19: 日本情報オリンピック旗(JOI Flag) 解説

得点分布(再再掲)

0  

2  

4  

6  

8  

10  

12  

0   10   20   30   40   50   60   70   80   90   100  

Page 20: 日本情報オリンピック旗(JOI Flag) 解説

まとめ  

完全フィードバック問題は比較的簡単    

解く順番は自由ですが  とれる点を落とさないように  

 2日目からも頑張ってください