SlideShare uma empresa Scribd logo
1 de 23
NPC April Fool's Contest
         2013
         解説
Over View Sheet
●   入出力例から問題を察する
●
    察せなくても...
    –   オンライン整数列辞典に投げると答えが降ってくる
●
    1,11,12,1121,1321,122131,132231...
●
    前の数字に1が何個,2が何個,3が何個...
    –   0個なら書かない
●   適当に文字列処理すれば解ける?
Over View Sheet
●   JudgeにはN = 10^ 9のケースがあります
    –   計算量が間に合わない
●   実は13項目から全部12233241でループに入
    る
●   ループに入ったら抜け出せば良い
●   想定計算量:O(定数)
OverViewSheet結果




 TLE多発
P!=NP
●   問題分がアホの子発言なので、頭のレベルを
    下げて考える
●   「複雑な式変形」「画期的な等式を導く」
●   P!=NP
●   P! = NP
●   (P-1)! = N
●   これが言いたかった
P! = NP
●   入出力例を見るとPが与えられるので(P-1)!を求
    めさせる問題と察せる
    –   さっきの式変形ができれば自明
●   ただしPが10^ 9まである
    –   TLE必至
    –   ただし手元では数十秒で実行できる
●   埋め込めば良い
    –   10^ 7の倍数の解を埋め込めば良いです
P != NP
●   コンテスト中にアラートが出ましたね
●
    参考の論文PDFへのリンクを貼りました



            *      *
         *     +  うそです
            n ∧_∧ n
        + (ヨ(* ´∀`)E)
             Y     Y    *
P!=NP結果




 TLE多発
Today is Aprilfool
●   今日はエイプリルフール
●   問題文はWikipediaの内容を適当に言い換えま
    した
●   わけがわからないので, OverViewSheetを読み
    ましょう
OverViewSheet

●   Input Only
●   Input Only
●   Input Only
●   Input Only
Today is Aprilfool
●   Input Onlyなので出力しなくていいです
●   m ain(){}でも通ります
Today is Aprilfoolの入力紹介
●   #1 pya
●   #2 123
●   #3 hi m y nam e is catup
●   #4 3.1415926535
●   #5 Green Triangle Monster
●   #6 no m ore output
Today is Aprilfool 結果
●   一番解かれてましたー
●   First AC 0:02
Lying is fun




ガチ問です
Lying is fun 概要
●   「この中にa人{未満|以上}の正直者がいる」
●   「a番の人は{正直者|嘘つき}である」
●   という発言をするN人が集まる
●   正直者の人数の最小値を求めよ
●   ありえない場合は-1を出力せよ
Lying is fun考察
●   「この中にa人{未満|以上}の正直者がいる」
●   このタイプの発言だけの場合はどう解くか
●   0 ≦ i ≦ Nに対して「正直者がi人の場合何人の
    発言が真実となるか」 をしらべる
●   表に書くとわかりやすい
Lying is fun考察
●   A「3未満」B「2以上」C「1以上」D「0以
    上」
●   それぞれが真実となる範囲に1を足す
●   → os法(累積和)
     im
     A   B    C   D   合   i   適性
     0   1    1   1   3   3   OK
     1   1    1   1   4   2   NG
     1   0    1   1   3   1   NG
     1   0    0   1   2   0   NG
Lying is fun考察
●   「a番の人は{正直者|嘘つき}である」
●   これだけの場合は?
●   グラフを書けば良い
    –   一人から一つの辺を他人に伸ばす
    –   閉路1つを根とする木(クトゥルフ)ができあが
        る
    –   厳密にはクトゥルフの森ができあがる
Lying is fun考察
●   各連結成分はある頂点を正直者か嘘つきか決
    めると残りも決まる
    –   2通りの結果がある
    –   他の連結成分には影響しないので小さい方を取れ
        ば良い
●   クトゥルフ検出は頂点を色つけしたり、強連
    結成分分解するなどすればよい
Lying is fun考察
●   両方の発言がある場合は?
●   一部のクトゥルフの頂点が閉路じゃなくて
    「この中にa人{未満|以上}の正直者がいる」
    のタイプの頂点になる → 木になります!
●   そういう木についてはim os法で足す値が1じゃ
    なくなるだけで, 同様に解くことができる
●   問題は普通のクトゥルフの方
Lying is fun考察
●   貪欲に正直者が少ない方を取れば良いのか?
    –   入出力例6がコーナーケースです
●   クトゥルフだけで作ることができる正直者の
    人数を列挙する必要がある
    –   DPでフラグを立てるなどして その人数が可能か
        O(1)で調べることができるようにする
●   やればできる
Lying is fun想定解
●   連結成分を分解 O(N)
●   木の連結成分をim os処理 O(N)
●   クトゥルフの連結成分をDP O(N^ 2)
●   各0 ≦ i ≦ Nについて可能か調べるO(N)
●   想定計算量O(N^ 2)
●   N = 10,000ですが定数が軽いので通ります
Lying is fun
●   「エイプリルフールコンテストなのにガチ
    問」という嘘でしたー
●   AC:5人
●   AC以外の人は手を付けてない感じ
    –   普通のコンテストで出せばよかったかもしれない
    –   反省

Mais conteúdo relacionado

Destaque (9)

PC解体
PC解体PC解体
PC解体
 
Yarudake
YarudakeYarudake
Yarudake
 
Moon
MoonMoon
Moon
 
人間対Pc2
人間対Pc2人間対Pc2
人間対Pc2
 
Npc april fool2014
Npc april fool2014Npc april fool2014
Npc april fool2014
 
Imo
ImoImo
Imo
 
Amortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 StackAmortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 Stack
 
辺彩色
辺彩色辺彩色
辺彩色
 
ハッキング実演
ハッキング実演ハッキング実演
ハッキング実演
 

Mais de Ken Ogura (14)

計算量
計算量計算量
計算量
 
Shio dtm
Shio dtmShio dtm
Shio dtm
 
Hairetu2
Hairetu2Hairetu2
Hairetu2
 
Lunch
LunchLunch
Lunch
 
Divisor
DivisorDivisor
Divisor
 
Homework
HomeworkHomework
Homework
 
Pool
PoolPool
Pool
 
Sns
SnsSns
Sns
 
Pencil
PencilPencil
Pencil
 
Spell check
Spell checkSpell check
Spell check
 
Black board
Black boardBlack board
Black board
 
Donyoku
DonyokuDonyoku
Donyoku
 
Nazoki
NazokiNazoki
Nazoki
 
人材発掘うっはうは
人材発掘うっはうは人材発掘うっはうは
人材発掘うっはうは
 

April2013

  • 1. NPC April Fool's Contest 2013 解説
  • 2. Over View Sheet ● 入出力例から問題を察する ● 察せなくても... – オンライン整数列辞典に投げると答えが降ってくる ● 1,11,12,1121,1321,122131,132231... ● 前の数字に1が何個,2が何個,3が何個... – 0個なら書かない ● 適当に文字列処理すれば解ける?
  • 3. Over View Sheet ● JudgeにはN = 10^ 9のケースがあります – 計算量が間に合わない ● 実は13項目から全部12233241でループに入 る ● ループに入ったら抜け出せば良い ● 想定計算量:O(定数)
  • 5. P!=NP ● 問題分がアホの子発言なので、頭のレベルを 下げて考える ● 「複雑な式変形」「画期的な等式を導く」 ● P!=NP ● P! = NP ● (P-1)! = N ● これが言いたかった
  • 6. P! = NP ● 入出力例を見るとPが与えられるので(P-1)!を求 めさせる問題と察せる – さっきの式変形ができれば自明 ● ただしPが10^ 9まである – TLE必至 – ただし手元では数十秒で実行できる ● 埋め込めば良い – 10^ 7の倍数の解を埋め込めば良いです
  • 7. P != NP ● コンテスト中にアラートが出ましたね ● 参考の論文PDFへのリンクを貼りました         *      *      *     +  うそです         n ∧_∧ n     + (ヨ(* ´∀`)E)          Y     Y    *
  • 9. Today is Aprilfool ● 今日はエイプリルフール ● 問題文はWikipediaの内容を適当に言い換えま した ● わけがわからないので, OverViewSheetを読み ましょう
  • 10. OverViewSheet ● Input Only ● Input Only ● Input Only ● Input Only
  • 11. Today is Aprilfool ● Input Onlyなので出力しなくていいです ● m ain(){}でも通ります
  • 12. Today is Aprilfoolの入力紹介 ● #1 pya ● #2 123 ● #3 hi m y nam e is catup ● #4 3.1415926535 ● #5 Green Triangle Monster ● #6 no m ore output
  • 13. Today is Aprilfool 結果 ● 一番解かれてましたー ● First AC 0:02
  • 15. Lying is fun 概要 ● 「この中にa人{未満|以上}の正直者がいる」 ● 「a番の人は{正直者|嘘つき}である」 ● という発言をするN人が集まる ● 正直者の人数の最小値を求めよ ● ありえない場合は-1を出力せよ
  • 16. Lying is fun考察 ● 「この中にa人{未満|以上}の正直者がいる」 ● このタイプの発言だけの場合はどう解くか ● 0 ≦ i ≦ Nに対して「正直者がi人の場合何人の 発言が真実となるか」 をしらべる ● 表に書くとわかりやすい
  • 17. Lying is fun考察 ● A「3未満」B「2以上」C「1以上」D「0以 上」 ● それぞれが真実となる範囲に1を足す ● → os法(累積和) im A B C D 合 i 適性 0 1 1 1 3 3 OK 1 1 1 1 4 2 NG 1 0 1 1 3 1 NG 1 0 0 1 2 0 NG
  • 18. Lying is fun考察 ● 「a番の人は{正直者|嘘つき}である」 ● これだけの場合は? ● グラフを書けば良い – 一人から一つの辺を他人に伸ばす – 閉路1つを根とする木(クトゥルフ)ができあが る – 厳密にはクトゥルフの森ができあがる
  • 19. Lying is fun考察 ● 各連結成分はある頂点を正直者か嘘つきか決 めると残りも決まる – 2通りの結果がある – 他の連結成分には影響しないので小さい方を取れ ば良い ● クトゥルフ検出は頂点を色つけしたり、強連 結成分分解するなどすればよい
  • 20. Lying is fun考察 ● 両方の発言がある場合は? ● 一部のクトゥルフの頂点が閉路じゃなくて 「この中にa人{未満|以上}の正直者がいる」 のタイプの頂点になる → 木になります! ● そういう木についてはim os法で足す値が1じゃ なくなるだけで, 同様に解くことができる ● 問題は普通のクトゥルフの方
  • 21. Lying is fun考察 ● 貪欲に正直者が少ない方を取れば良いのか? – 入出力例6がコーナーケースです ● クトゥルフだけで作ることができる正直者の 人数を列挙する必要がある – DPでフラグを立てるなどして その人数が可能か O(1)で調べることができるようにする ● やればできる
  • 22. Lying is fun想定解 ● 連結成分を分解 O(N) ● 木の連結成分をim os処理 O(N) ● クトゥルフの連結成分をDP O(N^ 2) ● 各0 ≦ i ≦ Nについて可能か調べるO(N) ● 想定計算量O(N^ 2) ● N = 10,000ですが定数が軽いので通ります
  • 23. Lying is fun ● 「エイプリルフールコンテストなのにガチ 問」という嘘でしたー ● AC:5人 ● AC以外の人は手を付けてない感じ – 普通のコンテストで出せばよかったかもしれない – 反省