SlideShare ist ein Scribd-Unternehmen logo
1 von 20
Downloaden Sie, um offline zu lesen
日本情報オリンピック旗	
  
    JOI	
  Flag
      今西 健介	
  
      @japlj
問題
l    再帰的に定義された	
  JOI	
  旗	
  
      l  4つに分割して	
  J,	
  O,	
  I,	
  JOI旗	
  



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


l    正しいJOI旗に修正する最小コストは?
基本的な考え方
           	
  
  JOI旗は再帰的に定義されている	
  
(レベルKの旗はレベルK-1の旗を含む)	
  
基本的な考え方
           	
  
  JOI旗は再帰的に定義されている	
  
(レベルKの旗はレベルK-1の旗を含む)	
  
           ↓	
  
     定義通りに4つに分割して	
  
     再帰的に答を計算できる
簡単な場合
l    マス目を	
  J	
  (または	
  O,	
  I)	
  のみで埋める場合	
  
      l  さすがに簡単	
  



l    たとえば	
  J	
  のみで埋めるなら	
  
      O	
  と	
  I	
  の個数を数えれば良い	
  
      l  数え方はあとで	
  
40%解法 その1
l    実際に 2K × 2K ぶんのメモリをとる	
  
      l  空間計算量   O(4K)


l    文字を数えるときは実際に	
  
      マス目を見ていけばよい	
  
      l  時間計算量   O(K 4K)
40%解法 その2
l    さすがに無駄が多すぎ	
  
      l  初めから埋まっているマスは    1 000	
  個以下	
  
      l  文字の数え上げは O(N) でできる	
  



l    それでも40点	
  
      l  必要な再帰呼び出しの回数は         O(4K)	
  回
100%解法 その1
l    マス目の個数に比べて N	
  は小さい!	
  
      l  4K 430 = 1 152 921 504 606 846 976
      l  N 1 000
      l  スカスカ	
  



l    初めから埋まっているマスが無ければ	
  
      修正に必要なコストは明らかに 0
      l  再帰呼び出しが枝刈りできる!	
  
100%解法 その2
l    枝を刈ると O(KN)	
  回の再帰呼び出し	
  
      l  各マスが影響を与える再帰呼び出しは     K	
  個	
  


l    文字を O(N)	
  で数えると全体で O(KN2)
      l  KN2  3×107
      l  1.5秒あれば間に合う
おまけ
l    数え方によってはもっと効率良くなる	
  
      l  全体で O(KN + N2)
      l  全体で O(KN)
得点分布
12	
  
10	
  
 8	
  
 6	
  
 4	
  
 2	
  
 0	
  
         0	
     10	
   20	
   30	
   40	
   50	
   60	
   70	
   80	
   90	
   100	
  
ところで
競技1日目を終えて
l     競技初日が終わりました	
  
       l  結果はどうあれまだ3日あります	
  
       l  点数にしてまだ900	
  点もあります	
  
       l  諦めてはいけない(戒め)	
  

	
  
l     残り3日で実力を最大限発揮するために	
  
       競技上の注意があります	
  
問題を読む
•  問題は全部読みましょう
 –  難易度順に並んでいるとは限らない
 –  「簡単な問題を読んでいなかった」は痛い


•  Overview Sheet もちゃんと見ましょう
 –  時間制限やメモリ制限から問題の雰囲気を
    察することができるかもしれない?
アルゴリズム
•  明記された部分点に頼る
 –  得点になる
 –  部分点のアルゴリズムがヒントになる
 –  入力のどのパラメータが重要か


•  明記された部分点に頼りすぎない
 –  実装時間との兼ね合い
 –  小さいサイズだと可能な操作が多い
  •  自然な部分点解法がわからないまま満点解法
     がわかってしまう,なんてことも
得点分布(再掲)
12	
  
10	
  
 8	
  
 6	
  
 4	
  
 2	
  
 0	
  
         0	
     10	
   20	
   30	
   40	
   50	
   60	
   70	
   80	
   90	
   100	
  
フィードバックについて
l    この問題は完全フィードバックでした	
  
      l  提出したら点数まるわかり	
  
      l  バグっててもデバッグし放題(?)	
  


l    【重要】完全フィードバックがある問題は	
  
フィードバックについて
l    この問題は完全フィードバックでした	
  
      l  提出したら点数まるわかり	
  
      l  バグっててもデバッグし放題(?)	
  



l    【重要】完全フィードバックがある問題は	
  
                    簡単	
  
      (少なくともその日の問題セットの中では)	
  
得点分布(再再掲)
12	
  
10	
  
 8	
  
 6	
  
 4	
  
 2	
  
 0	
  
         0	
     10	
   20	
   30	
   40	
   50	
   60	
   70	
   80	
   90	
   100	
  
まとめ
          	
  
完全フィードバック問題は比較的簡単	
  
          	
  
     解く順番は自由ですが	
  
   とれる点を落とさないように	
  
          	
  
  2日目からも頑張ってください

Weitere ähnliche Inhalte

Was ist angesagt?

AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Inc.
 
AtCoder Regular Contest 021 解説
AtCoder Regular Contest 021 解説AtCoder Regular Contest 021 解説
AtCoder Regular Contest 021 解説AtCoder Inc.
 
AtCoder Regular Contest 036 解説
AtCoder Regular Contest 036 解説AtCoder Regular Contest 036 解説
AtCoder Regular Contest 036 解説AtCoder Inc.
 
U・N・C・O
U・N・C・OU・N・C・O
U・N・C・Otomerun
 
Cf219 d1e
Cf219 d1eCf219 d1e
Cf219 d1eDEGwer
 
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 023 解説
AtCoder Beginner Contest 023 解説AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Inc.
 
競技プログラミングの楽しみ
競技プログラミングの楽しみ競技プログラミングの楽しみ
競技プログラミングの楽しみna_o_ys
 
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Inc.
 
Infinite SVM - ICML 2011 読み会
Infinite SVM - ICML 2011 読み会Infinite SVM - ICML 2011 読み会
Infinite SVM - ICML 2011 読み会Shuyo Nakatani
 
AtCoder Regular Contest 034 解説
AtCoder Regular Contest 034 解説AtCoder Regular Contest 034 解説
AtCoder Regular Contest 034 解説AtCoder Inc.
 
AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説AtCoder Inc.
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Inc.
 
AtCoder Regular Contest 019 解説
AtCoder Regular Contest 019 解説AtCoder Regular Contest 019 解説
AtCoder Regular Contest 019 解説AtCoder Inc.
 
AtCoder Regular Contest 023 解説
AtCoder Regular Contest 023 解説AtCoder Regular Contest 023 解説
AtCoder Regular Contest 023 解説AtCoder Inc.
 

Was ist angesagt? (20)

AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
AtCoder Regular Contest 021 解説
AtCoder Regular Contest 021 解説AtCoder Regular Contest 021 解説
AtCoder Regular Contest 021 解説
 
AtCoder Regular Contest 036 解説
AtCoder Regular Contest 036 解説AtCoder Regular Contest 036 解説
AtCoder Regular Contest 036 解説
 
U・N・C・O
U・N・C・OU・N・C・O
U・N・C・O
 
Cf219 d1e
Cf219 d1eCf219 d1e
Cf219 d1e
 
arc047
arc047arc047
arc047
 
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 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 解説
 
Infinite SVM - ICML 2011 読み会
Infinite SVM - ICML 2011 読み会Infinite SVM - ICML 2011 読み会
Infinite SVM - ICML 2011 読み会
 
計算量
計算量計算量
計算量
 
AtCoder Regular Contest 034 解説
AtCoder Regular Contest 034 解説AtCoder Regular Contest 034 解説
AtCoder Regular Contest 034 解説
 
AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
 
AtCoder Regular Contest 019 解説
AtCoder Regular Contest 019 解説AtCoder Regular Contest 019 解説
AtCoder Regular Contest 019 解説
 
動的計画法
動的計画法動的計画法
動的計画法
 
AtCoder Regular Contest 023 解説
AtCoder Regular Contest 023 解説AtCoder Regular Contest 023 解説
AtCoder Regular Contest 023 解説
 

Andere mochten auch

ICPC2014 チーム紹介スライド !#$%&()*+-./:;<=>?@[\]^_`{|}~
ICPC2014 チーム紹介スライド !#$%&()*+-./:;<=>?@[\]^_`{|}~ICPC2014 チーム紹介スライド !#$%&()*+-./:;<=>?@[\]^_`{|}~
ICPC2014 チーム紹介スライド !#$%&()*+-./:;<=>?@[\]^_`{|}~Kensuke Imanishi
 
情報サイトの金持ちさんと貧乏さん
情報サイトの金持ちさんと貧乏さん情報サイトの金持ちさんと貧乏さん
情報サイトの金持ちさんと貧乏さんAtsufumi Yoshikawa
 
超初心者向け・オンライン勉強会のススメ(WordCamp Tokyo 2016 LT スライド)
超初心者向け・オンライン勉強会のススメ(WordCamp Tokyo 2016 LT スライド)超初心者向け・オンライン勉強会のススメ(WordCamp Tokyo 2016 LT スライド)
超初心者向け・オンライン勉強会のススメ(WordCamp Tokyo 2016 LT スライド)Hijili Kosugi
 
テーマ・プラグイン開発の光と闇 #wctokyo
テーマ・プラグイン開発の光と闇 #wctokyoテーマ・プラグイン開発の光と闇 #wctokyo
テーマ・プラグイン開発の光と闇 #wctokyoHidekazu Ishikawa
 
Web制作・運用会社に必要なCDNサービスとは?
Web制作・運用会社に必要なCDNサービスとは?Web制作・運用会社に必要なCDNサービスとは?
Web制作・運用会社に必要なCDNサービスとは?J-Stream Inc.
 
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~Kenji Hiranabe
 
[Slide]闇アジャイラーvs光アジャイラーforDevLOVE(EnergizedWorkLT祭)
[Slide]闇アジャイラーvs光アジャイラーforDevLOVE(EnergizedWorkLT祭)[Slide]闇アジャイラーvs光アジャイラーforDevLOVE(EnergizedWorkLT祭)
[Slide]闇アジャイラーvs光アジャイラーforDevLOVE(EnergizedWorkLT祭)masashi takehara
 

Andere mochten auch (7)

ICPC2014 チーム紹介スライド !#$%&()*+-./:;<=>?@[\]^_`{|}~
ICPC2014 チーム紹介スライド !#$%&()*+-./:;<=>?@[\]^_`{|}~ICPC2014 チーム紹介スライド !#$%&()*+-./:;<=>?@[\]^_`{|}~
ICPC2014 チーム紹介スライド !#$%&()*+-./:;<=>?@[\]^_`{|}~
 
情報サイトの金持ちさんと貧乏さん
情報サイトの金持ちさんと貧乏さん情報サイトの金持ちさんと貧乏さん
情報サイトの金持ちさんと貧乏さん
 
超初心者向け・オンライン勉強会のススメ(WordCamp Tokyo 2016 LT スライド)
超初心者向け・オンライン勉強会のススメ(WordCamp Tokyo 2016 LT スライド)超初心者向け・オンライン勉強会のススメ(WordCamp Tokyo 2016 LT スライド)
超初心者向け・オンライン勉強会のススメ(WordCamp Tokyo 2016 LT スライド)
 
テーマ・プラグイン開発の光と闇 #wctokyo
テーマ・プラグイン開発の光と闇 #wctokyoテーマ・プラグイン開発の光と闇 #wctokyo
テーマ・プラグイン開発の光と闇 #wctokyo
 
Web制作・運用会社に必要なCDNサービスとは?
Web制作・運用会社に必要なCDNサービスとは?Web制作・運用会社に必要なCDNサービスとは?
Web制作・運用会社に必要なCDNサービスとは?
 
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
 
[Slide]闇アジャイラーvs光アジャイラーforDevLOVE(EnergizedWorkLT祭)
[Slide]闇アジャイラーvs光アジャイラーforDevLOVE(EnergizedWorkLT祭)[Slide]闇アジャイラーvs光アジャイラーforDevLOVE(EnergizedWorkLT祭)
[Slide]闇アジャイラーvs光アジャイラーforDevLOVE(EnergizedWorkLT祭)
 

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

CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説AtCoder Inc.
 
AtCoder Beginner Contest 009 解説
AtCoder Beginner Contest 009 解説AtCoder Beginner Contest 009 解説
AtCoder Beginner Contest 009 解説AtCoder Inc.
 
Sec15 dynamic programming
Sec15 dynamic programmingSec15 dynamic programming
Sec15 dynamic programmingKeisuke OTAKI
 
Mastermind
MastermindMastermind
Mastermindtomerun
 
JOI本選 夜店(NightMarket)解説
JOI本選 夜店(NightMarket)解説JOI本選 夜店(NightMarket)解説
JOI本選 夜店(NightMarket)解説Hiroshi Yamashita
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界Preferred Networks
 
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしいKazkuki Oakamoto
 
自然言語処理のための機械学習入門1章
自然言語処理のための機械学習入門1章自然言語処理のための機械学習入門1章
自然言語処理のための機械学習入門1章Hiroki Mizukami
 
130323 slide all
130323 slide all130323 slide all
130323 slide allikea0064
 
AtCoder Regular Contest 017
AtCoder Regular Contest 017AtCoder Regular Contest 017
AtCoder Regular Contest 017AtCoder Inc.
 
Joi模擬予選2013 6番解説
Joi模擬予選2013 6番解説Joi模擬予選2013 6番解説
Joi模擬予選2013 6番解説DEGwer
 
AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説AtCoder Inc.
 

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

CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説
 
AtCoder Beginner Contest 009 解説
AtCoder Beginner Contest 009 解説AtCoder Beginner Contest 009 解説
AtCoder Beginner Contest 009 解説
 
写像 12 相
写像 12 相写像 12 相
写像 12 相
 
Sec15 dynamic programming
Sec15 dynamic programmingSec15 dynamic programming
Sec15 dynamic programming
 
Mastermind
MastermindMastermind
Mastermind
 
JOI本選 夜店(NightMarket)解説
JOI本選 夜店(NightMarket)解説JOI本選 夜店(NightMarket)解説
JOI本選 夜店(NightMarket)解説
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
 
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい
 
自然言語処理のための機械学習入門1章
自然言語処理のための機械学習入門1章自然言語処理のための機械学習入門1章
自然言語処理のための機械学習入門1章
 
計算機理論入門03
計算機理論入門03計算機理論入門03
計算機理論入門03
 
130323 slide all
130323 slide all130323 slide all
130323 slide all
 
AtCoder Regular Contest 017
AtCoder Regular Contest 017AtCoder Regular Contest 017
AtCoder Regular Contest 017
 
Joi模擬予選2013 6番解説
Joi模擬予選2013 6番解説Joi模擬予選2013 6番解説
Joi模擬予選2013 6番解説
 
AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説
 

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

  • 1. 日本情報オリンピック旗   JOI  Flag 今西 健介   @japlj
  • 2. 問題 l  再帰的に定義された  JOI  旗   l  4つに分割して  J,  O,  I,  JOI旗   l  大きさ 2K × 2K のマス目   l  あからじめ N  マスが埋まっている   l  1 K 30, 1 N 1 000 l  正しいJOI旗に修正する最小コストは?
  • 3. 基本的な考え方   JOI旗は再帰的に定義されている   (レベルKの旗はレベルK-1の旗を含む)  
  • 4. 基本的な考え方   JOI旗は再帰的に定義されている   (レベルKの旗はレベルK-1の旗を含む)   ↓   定義通りに4つに分割して   再帰的に答を計算できる
  • 5. 簡単な場合 l  マス目を  J  (または  O,  I)  のみで埋める場合   l  さすがに簡単   l  たとえば  J  のみで埋めるなら   O  と  I  の個数を数えれば良い   l  数え方はあとで  
  • 6. 40%解法 その1 l  実際に 2K × 2K ぶんのメモリをとる   l  空間計算量 O(4K) l  文字を数えるときは実際に   マス目を見ていけばよい   l  時間計算量 O(K 4K)
  • 7. 40%解法 その2 l  さすがに無駄が多すぎ   l  初めから埋まっているマスは 1 000  個以下   l  文字の数え上げは O(N) でできる   l  それでも40点   l  必要な再帰呼び出しの回数は O(4K)  回
  • 8. 100%解法 その1 l  マス目の個数に比べて N  は小さい!   l  4K 430 = 1 152 921 504 606 846 976 l  N 1 000 l  スカスカ   l  初めから埋まっているマスが無ければ   修正に必要なコストは明らかに 0 l  再帰呼び出しが枝刈りできる!  
  • 9. 100%解法 その2 l  枝を刈ると O(KN)  回の再帰呼び出し   l  各マスが影響を与える再帰呼び出しは K  個   l  文字を O(N)  で数えると全体で O(KN2) l  KN2 3×107 l  1.5秒あれば間に合う
  • 10. おまけ l  数え方によってはもっと効率良くなる   l  全体で O(KN + N2) l  全体で O(KN)
  • 11. 得点分布 12   10   8   6   4   2   0   0   10   20   30   40   50   60   70   80   90   100  
  • 13. 競技1日目を終えて l  競技初日が終わりました   l  結果はどうあれまだ3日あります   l  点数にしてまだ900  点もあります   l  諦めてはいけない(戒め)     l  残り3日で実力を最大限発揮するために   競技上の注意があります  
  • 14. 問題を読む •  問題は全部読みましょう –  難易度順に並んでいるとは限らない –  「簡単な問題を読んでいなかった」は痛い •  Overview Sheet もちゃんと見ましょう –  時間制限やメモリ制限から問題の雰囲気を 察することができるかもしれない?
  • 15. アルゴリズム •  明記された部分点に頼る –  得点になる –  部分点のアルゴリズムがヒントになる –  入力のどのパラメータが重要か •  明記された部分点に頼りすぎない –  実装時間との兼ね合い –  小さいサイズだと可能な操作が多い •  自然な部分点解法がわからないまま満点解法 がわかってしまう,なんてことも
  • 16. 得点分布(再掲) 12   10   8   6   4   2   0   0   10   20   30   40   50   60   70   80   90   100  
  • 17. フィードバックについて l  この問題は完全フィードバックでした   l  提出したら点数まるわかり   l  バグっててもデバッグし放題(?)   l  【重要】完全フィードバックがある問題は  
  • 18. フィードバックについて l  この問題は完全フィードバックでした   l  提出したら点数まるわかり   l  バグっててもデバッグし放題(?)   l  【重要】完全フィードバックがある問題は   簡単   (少なくともその日の問題セットの中では)  
  • 19. 得点分布(再再掲) 12   10   8   6   4   2   0   0   10   20   30   40   50   60   70   80   90   100  
  • 20. まとめ   完全フィードバック問題は比較的簡単     解く順番は自由ですが   とれる点を落とさないように     2日目からも頑張ってください