Anúncio
Anúncio

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(定数)
  4. OverViewSheet結果  TLE多発
  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    *
  8. P!=NP結果  TLE多発
  9. Today is Aprilfool ● 今日はエイプリルフール ● 問題文はWikipediaの内容を適当に言い換えま した ● わけがわからないので, OverViewSheetを読みま しょう
  10. OverViewSheet ● Input Only ● Input Only ● Input Only ● Input Only
  11. Today is Aprilfool ● Input Onlyなので出力しなくていいです ● main(){}でも通ります
  12. Today is Aprilfoolの入力紹介 ● #1 pya ● #2 123 ● #3 hi my name is catup ● #4 3.1415926535 ● #5 Green Triangle Monster ● #6 no more output
  13. Today is Aprilfool 結果 ● 一番解かれてましたー ● First AC 0:02
  14. Lying is fun ガチ問です
  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を足す ● →imos法(累積和) 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人{未満|以上}の正直者がいる」のタイプの頂 点になる → 木になります! ● そういう木についてはimos法で足す値が1じゃな くなるだけで, 同様に解くことができる ● 問題は普通のクトゥルフの方
  21. Lying is fun考察 ● 貪欲に正直者が少ない方を取れば良いのか? – 入出力例6がコーナーケースです ● クトゥルフだけで作ることができる正直者の人数を 列挙する必要がある – DPでフラグを立てるなどして その人数が可能かO (1)で調べることができるようにする ● やればできる
  22. Lying is fun想定解 ● 連結成分を分解 O(N) ● 木の連結成分をimos処理 O(N) ● クトゥルフの連結成分をDP O(N^2) ● 各0 ≦ i ≦ Nについて可能か調べるO(N) ● 想定計算量O(N^2) ● N = 10,000ですが定数が軽いので通ります
  23. Lying is fun ● 「エイプリルフールコンテストなのにガチ問」という 嘘でしたー ● AC:5人 ● AC以外の人は手を付けてない感じ – 普通のコンテストで出せばよかったかもしれない – 反省
Anúncio