Upgrade to Pro — share decks privately, control downloads, hide ads and more …

包除原理 - 解ける数え上げの範囲を広げよう

Avatar for tsutaj tsutaj
October 16, 2018

包除原理 - 解ける数え上げの範囲を広げよう

スライド内のリンクを見たい方はこちら:https://hcpc-hokudai.github.io/archive/math_inclusion_exclusion_001.pdf

Avatar for tsutaj

tsutaj

October 16, 2018
Tweet

More Decks by tsutaj

Other Decks in Programming

Transcript

  1. 1 ೖ໳ฤ แআݪཧͱ͸ แআݪཧͷূ໌ 2 แআݪཧͷ໰୊ɾॳڃฤ ΦΠϥʔͷ ϕ ؔ਺ Uncommon

    Ball and Boxes 3 lahub and Permutations 3 แআݪཧͷ໰୊ɾதڃฤ LCM Rush Enumeration ఱԼҰϘσΟʔϏϧίϯςετ 4 แআݪཧͷ໰୊ɾ্ڃฤ ग़੮൪߸ (2) Rotated Palindromes Everything on It 5 ࿅श໰୊ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 2/78
  2. แআݪཧͱ͸ʁ ▶ ू߹ͷʮੵू߹ʯͱʮ࿨ू߹ʯ ɼٻΊΔͷ͸ͲͪΒ͕؆୯ʁ ▶ Ұൠʹੵू߹ͷ΄͏͕؆୯ ▶ ੵू߹ (intersection) ͸ෳ਺ͷ৚݅ͰϑΟϧλϦϯά͞Εͨ΋ͷΛूΊ

    ͨ݁ՌͳͷͰɼ௚઀ٻΊ΍͍͢ ▶ ࿨ू߹ (union) ͸ෳ਺ͷ৚݅ͷ͏ͪɼͲΕ͔ 1 ͭͰ΋౰ͯ͸·͍ͬͯΔ ΋ͷΛूΊͨ݁ՌͳͷͰɼٻΊʹ͍͘ 積集合 (intersection) 和集合 (union) tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 3/78
  3. แআݪཧͱ͸ʁ ▶ ू߹ͷʮੵू߹ʯͱʮ࿨ू߹ʯ ɼٻΊΔͷ͸ͲͪΒ͕؆୯ʁ ▶ Ұൠʹੵू߹ͷ΄͏͕؆୯ ▶ ੵू߹ (intersection) ͸ෳ਺ͷ৚݅ͰϑΟϧλϦϯά͞Εͨ΋ͷΛूΊ

    ͨ݁ՌͳͷͰɼ௚઀ٻΊ΍͍͢ ▶ ࿨ू߹ (union) ͸ෳ਺ͷ৚݅ͷ͏ͪɼͲΕ͔ 1 ͭͰ΋౰ͯ͸·͍ͬͯΔ ΋ͷΛूΊͨ݁ՌͳͷͰɼٻΊʹ͍͘ ▶ ௚઀ٻΊʹ͍͘࿨ू߹Λɼੵू߹ͷ૊Έ߹ΘͤͰٻΊΑ͏ ▶ ͜͜Ͱग़ͯ͘Δͷ͕ɼแআݪཧʂ 積集合 (intersection) 和集合 (union) tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 3/78
  4. 2 ͭͷू߹ʹର͢Δแআݪཧ ▶ 2 ͭͷू߹ͷ࿨ू߹ΛٻΊΔʹ͸ʁ ▶ ԼਤͷΑ͏ʹ଍͠Ҿ͖͢Ε͹Α͍ ▶ |A| +

    |B| Λ͢Δͱ |A ∩ B| ͕ 2 ճ଍͞Εͯ͠·͏ͨΊɼ|A ∩ B| ΛҾ͘ |A| = + - |B| |A ∩ B| |A ∪ B| tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 4/78
  5. 2 ͭͷू߹ʹର͢Δแআݪཧ ▶ 2 ͭͷू߹ͷ࿨ू߹ΛٻΊΔʹ͸ʁ ▶ ԼਤͷΑ͏ʹ଍͠Ҿ͖͢Ε͹Α͍ ▶ |A| +

    |B| Λ͢Δͱ |A ∩ B| ͕ 2 ճ଍͞Εͯ͠·͏ͨΊɼ|A ∩ B| ΛҾ͘ ▶ ࣮ࡍͷྫ ▶ 30 ҎԼͷࣗવ਺Ͱɼ3 ͰׂΕΔ͔ 5 ͰׂΕΔΑ͏ͳ਺͸͍ͭ͘ʁ |A| = + - |B| |A ∩ B| |A ∪ B| tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 4/78
  6. 2 ͭͷू߹ʹର͢Δแআݪཧ ▶ 2 ͭͷू߹ͷ࿨ू߹ΛٻΊΔʹ͸ʁ ▶ ԼਤͷΑ͏ʹ଍͠Ҿ͖͢Ε͹Α͍ ▶ |A| +

    |B| Λ͢Δͱ |A ∩ B| ͕ 2 ճ଍͞Εͯ͠·͏ͨΊɼ|A ∩ B| ΛҾ͘ ▶ ࣮ࡍͷྫ ▶ 30 ҎԼͷࣗવ਺Ͱɼ3 ͰׂΕΔ͔ 5 ͰׂΕΔΑ͏ͳ਺͸͍ͭ͘ʁ ▶ 2 ͭͷू߹ͷ৔߹͸؆୯͚ͩͲɼN ݸͷू߹ʹͳͬͨΒͲ͏ͳΔʁ ▶ ࣍ϖʔδͷࣜͷΑ͏ʹ͔͚Δ |A| = + - |B| |A ∩ B| |A ∪ B| tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 4/78
  7. N ݸͷू߹ʹର͢Δแআݪཧ แআݪཧ N ݸͷू߹ A1, A2, . . .

    , AN ͷ࿨ू߹ʹଐ͢Δཁૉ਺ |A1 ∪ · · · ∪ AN | = N ∑ k=1 (−1)k−1 × (k ݸͷʮ͔ͭʯͷ૯࿨) = ∑ i |Ai | − ∑ i<j |Ai ∩ Aj | + ∑ i<j<k |Ai ∩ Aj ∩ Ak | − · · · ▶ ͜Ε͸ຊ౰ʹ੒Γཱͭͷʁʁ ▶ A1 ∪ · · · ∪ AN Λ͍͔ͭ͘ͷྖҬʹ෼ׂ͠ɼ֤ྖҬʹ͍ͭͯҰ౓͚ͩ଍ ͞Ε͍ͯΕ͹ OK ▶ ೚ҙͷ m ʹ෇͍ͯɼू߹ m ݸͷڞ௨෦෼͕Ұ౓͚ͩ଍͞Ε͍ͯΔ͔ ݟͯΈΑ͏ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 5/78
  8. แআݪཧͷূ໌ ೋ߲ఆཧʹΑΔূ໌ (ू߹ m ݸͷڞ௨෦෼͕Ұ౓͚ͩ଍͞Ε͍ͯΔʁ ) ▶ ֤߲ʹ͓͚Δ଍͠Ҿ͖ͷߟ࡯ ▶ ӈลͷୈҰ߲

    (ू߹ 1 ݸͷ଍͠Ҿ͖) ʹ͓͍ͯ m ճ଍͞ΕΔ ▶ ӈลͷୈೋ߲ (ू߹ 2 ݸͷ଍͠Ҿ͖) ʹ͓͍ͯ m C2 ճҾ͔ΕΔ ▶ ... k ͕ح਺ͷ৔߹ɼӈลͷୈ k ߲ʹ͓͍ͯ m Ck ճ଍͞ΕΔ ▶ ... k ͕ۮ਺ͷ৔߹ɼӈลͷୈ k ߲ʹ͓͍ͯ m Ck ճҾ͔ΕΔ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 6/78
  9. แআݪཧͷূ໌ ೋ߲ఆཧʹΑΔূ໌ (ू߹ m ݸͷڞ௨෦෼͕Ұ౓͚ͩ଍͞Ε͍ͯΔʁ ) ▶ ֤߲ʹ͓͚Δ଍͠Ҿ͖ͷߟ࡯ ▶ ӈลͷୈҰ߲

    (ू߹ 1 ݸͷ଍͠Ҿ͖) ʹ͓͍ͯ m ճ଍͞ΕΔ ▶ ӈลͷୈೋ߲ (ू߹ 2 ݸͷ଍͠Ҿ͖) ʹ͓͍ͯ m C2 ճҾ͔ΕΔ ▶ ... k ͕ح਺ͷ৔߹ɼӈลͷୈ k ߲ʹ͓͍ͯ m Ck ճ଍͞ΕΔ ▶ ... k ͕ۮ਺ͷ৔߹ɼӈลͷୈ k ߲ʹ͓͍ͯ m Ck ճҾ͔ΕΔ ▶ Ҏ্Λ౿·͑Δͱɼ߹ܭͰ ∑ m k=1 (−1)k−1 mCk ճ଍͞ΕΔ ▶ ∑ m k=1 (−1)k−1 mCk ͕ 1 ͱ౳͚͠Ε͹ূ໌͓ΘΓ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 6/78
  10. แআݪཧͷূ໌ ೋ߲ఆཧΑΓɼ 0 = (1 − 1)m = m ∑

    k=0 1m−k(−1)k mCk = − m ∑ k=0 (−1)k−1 mCk (−1 ͷࢦ਺Λ͍ͬͯ͡ූ߸൓స) = 1 − m ∑ k=1 (−1)k−1 mCk (k = 0 ͚ͩൈ͖ग़͢) ▶ 1 − ∑ m k=1 (−1)k−1 mCk = 0 ͔ͩΒɼ ∑ m k=1 (−1)k−1 mCk = 1 ▶ ΑͬͯશྖҬʹ͍ͭͯҰ౓͚ͩ଍͞Ε͍ͯΔʂ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 7/78
  11. แআݪཧͷূ໌ ೋ߲ఆཧΑΓɼ 0 = (1 − 1)m = m ∑

    k=0 1m−k(−1)k mCk = − m ∑ k=0 (−1)k−1 mCk (−1 ͷࢦ਺Λ͍ͬͯ͡ූ߸൓స) = 1 − m ∑ k=1 (−1)k−1 mCk (k = 0 ͚ͩൈ͖ग़͢) ▶ 1 − ∑ m k=1 (−1)k−1 mCk = 0 ͔ͩΒɼ ∑ m k=1 (−1)k−1 mCk = 1 ▶ ΑͬͯશྖҬʹ͍ͭͯҰ౓͚ͩ଍͞Ε͍ͯΔʂ ▶ ৭ʑ௕͘ͳΓ·͕ͨ͠ɼ݁ہʮح਺ݸͷू߹ͷ intersection ͸଍͠ɼۮ ਺ݸͳΒҾ͘ʯ͜ͱΛ͢Ε͹Α͍Ͱ͢ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 7/78
  12. แআݪཧ ▶ ূ໌ʹؔ͢Δิ଍ ▶ ਺ֶతؼೲ๏Ͱ΋ࣔ͢͜ͱ͕Ͱ͖·͢ ▶ ৄࡉ͸লུ͠·͢ (άάͬͨΒग़ͯ͘ΔͷͰɼؾʹͳͬͨΒௐ΂ͯͶ) ▶ ͜ΕͰแআݪཧͷೖ໳͸ऴΘΓͰ͢

    ▶ ͔͜͜Β͸࣮ࡍʹ໰୊Λߟ࡯ͯ͠Έ·͠ΐ͏ʂ ▶ ॳڃͰ͸ɼ؆୯໨ͷయܕΛѻ͍·͢ ▶ தڃͰ͸ɼߴ଎θʔλม׵ɾϝϏ΢εม׵΍ DP Λަ͑ͨগ͠೉͍͠໰ ୊Λѻ͍·͢ ▶ ্ڃͰ͸ɼߟ࡯͕೉͍͠໰୊Λѻ͍·͢ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 8/78
  13. ΦΠϥʔͷ ϕ ؔ਺ ΦΠϥʔͷ ϕ ؔ਺ ਖ਼ͷ੔਺ n ʹ͍ͭͯɼ1 ͔Β

    n ·Ͱͷࣗવ਺ͷ͏ͪ n ͱޓ͍ʹૉͳ΋ͷͷ ݸ਺ΛٻΊΑɽ ▶ 1 ≤ n ≤ 109 ग़య : AOJ NTL_1_D Euler's Phi Function Link αϯϓϧ ೖྗ 1 : JT1 ग़ྗ: JT1 ೖྗ 2 : JT1 ग़ྗ: JT1 ▶ ͲͷΑ͏ͳू߹Λߟ͑ͯ਺্͑͛ͨΒྑ͍͔ʁ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 9/78
  14. ΦΠϥʔͷ ϕ ؔ਺ ▶ ޓ͍ʹૉͳ΋ͷ ˠ n ͕࣋ͭͲͷૉҼ਺΋࣋ͨͳ͍ ▶ ༨ࣄ৅Λߟ͑ͯɼ

    ʮޓ͍ʹૉͰͳ͍΋ͷʯΛ਺͑Δ͜ͱΛߟ͑Δ ▶ ޓ͍ʹૉͰͳ͍΋ͷ ˠ n ͕࣋ͭૉҼ਺Λগͳ͘ͱ΋ 1 ͭ࣋ͭ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 10/78
  15. ΦΠϥʔͷ ϕ ؔ਺ ▶ ޓ͍ʹૉͳ΋ͷ ˠ n ͕࣋ͭͲͷૉҼ਺΋࣋ͨͳ͍ ▶ ༨ࣄ৅Λߟ͑ͯɼ

    ʮޓ͍ʹૉͰͳ͍΋ͷʯΛ਺͑Δ͜ͱΛߟ͑Δ ▶ ޓ͍ʹૉͰͳ͍΋ͷ ˠ n ͕࣋ͭૉҼ਺Λগͳ͘ͱ΋ 1 ͭ࣋ͭ ▶ n ͕࣋ͭૉҼ਺Λ p1, p2, . . . , pm ͱஔ͘ ▶ p1 ΛૉҼ਺ͱͯ࣋ͭ͠ n ҎԼͷࣗવ਺ͷू߹Λ P1 ͱఆٛ ▶ ҎԼಉ༷ʹ P2 , . . . , Pm Λఆٛ ▶ ʮޓ͍ʹૉͰͳ͍ʯࣗવ਺Λද͢ू߹͸Ͳ͏ॻ͚Δʁ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 10/78
  16. ΦΠϥʔͷ ϕ ؔ਺ ▶ ޓ͍ʹૉͳ΋ͷ ˠ n ͕࣋ͭͲͷૉҼ਺΋࣋ͨͳ͍ ▶ ༨ࣄ৅Λߟ͑ͯɼ

    ʮޓ͍ʹૉͰͳ͍΋ͷʯΛ਺͑Δ͜ͱΛߟ͑Δ ▶ ޓ͍ʹૉͰͳ͍΋ͷ ˠ n ͕࣋ͭૉҼ਺Λগͳ͘ͱ΋ 1 ͭ࣋ͭ ▶ n ͕࣋ͭૉҼ਺Λ p1, p2, . . . , pm ͱஔ͘ ▶ p1 ΛૉҼ਺ͱͯ࣋ͭ͠ n ҎԼͷࣗવ਺ͷू߹Λ P1 ͱఆٛ ▶ ҎԼಉ༷ʹ P2 , . . . , Pm Λఆٛ ▶ ʮޓ͍ʹૉͰͳ͍ʯࣗવ਺Λද͢ू߹͸Ͳ͏ॻ͚Δʁ ▶ n ͷૉҼ਺Λগͳ͘ͱ΋ 1 ͭ࣋ͭΜ͔ͩΒɾɾɾʁ ▶ P1 ∪ P2 ∪ · · · ∪ Pm ͱॻ͚Δʂ ▶ ͜ͷ࿨ू߹ͷཁૉ਺͸ɼแআݪཧΛ࢖ͬͯٻΊΒΕΔ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 10/78
  17. ΦΠϥʔͷ ϕ ؔ਺ ͭ·Γɼղ๏Λ·ͱΊΔͱ 1. n ͷૉҼ਺Λྻڍ͢Δ 2. ૉҼ਺ʹΑͬͯఆΊΒΕΔू߹Λ 1

    ݸҎ্બ୒͠ɼͦͷੵू߹ͷཁૉ ਺Λ଍͠Ҿ͖ ▶ ʮޓ͍ʹૉͰͳ͍ʯࣗવ਺Λ਺্͑͛Δ ▶ ͋ΓಘΔू߹ͷબ୒ํ๏Λશͯࢼ͢ඞཁ͕͋ΔͷͰɼbit ԋࢉͱ૬ੑ˓ 3. n ͔Βɼ্ͰٻΊͨ஋ΛҾ͘ ▶ ʮޓ͍ʹૉͰ͋Δʯࣗવ਺Λ਺্͑͛Δ ࣮૷͸࣍ϖʔδͰ঺հ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 11/78
  18. Uncommon Uncommon N ݸͷҟͳΔ੔਺ a1, . . . , aN

    ͱ੔਺ M ͕༩͑ΒΕΔͷͰɼ1 Ҏ্ M Ҏ ԼͷͦΕͧΕͷ੔਺ i ʹ͍ͭͯɼa1, . . . , aN ͷ͏ͪޓ͍ʹૉͰ͋Δ΋ͷͷ ݸ਺ΛٻΊ͍ͯͩ͘͞ɽ ▶ 1 ≤ N, M ≤ 105 ▶ 1 ≤ ai ≤ 105 ▶ ai ͸શͯҟͳΔ ▶ ೖྗ஋͸͢΂ͯ੔਺ ग़య : ʮΈΜͳͷϓϩίϯ 2018ʯܾউ Φʔϓϯίϯςετ A Link ▶ ઌ΄ͲͷʮΦΠϥʔͷ ϕ ؔ਺ʯͰ༻͍ͨΞΠσΞ͕໾ʹཱͭͱࢥ͍ ·͢ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 13/78
  19. Uncommon ▶ ू߹ͷ࡞Γํ͸ɼઌ΄Ͳͷ໰୊ͱશ͘ಉ͡ʂ ▶ ू߹ͷத਎͕ʮn ҎԼͷࣗવ਺ʯͰ͸ͳ͘ɼ ʮ༩͑ΒΕͨ੔਺ a1 , .

    . . aN ʯʹมԽ͚ͨͩ͠ ▶ ͱ͍͏Θ͚ͰٻΊํͷखॱ͸লུ͠·͢ ▶ 1 ͔Β M ·Ͱͷશͯͷ਺ࣈʹ͍ͭͯ౴͑ͳ͚Ε͹ͳΒͳ͍͚Ͳɼܭࢉ ྔ͸େৎ෉ʁ ▶ M ≤ 105 Ͱ͋Δ͜ͱ͔ΒɼૉҼ਺ͷ਺͸ͱͯ΋গͳ͍ (6 ݸఔ౓) ▶ ͜Ε͘Β͍ͳΒ͹ී௨ʹϧʔϓΛճͤΔͷͰ໰୊ͳ͍ ▶ ૉҼ਺ྻڍΛݺͿ͜ͱ͕ଟ͘ͳΔͷͰɼؔ਺Խ͢Δͱྑ͍͔΋ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 14/78
  20. Ball and Boxes 3 Ball and Boxes 3 ҎԼͷ৚݅Λຬͨ͢ɼn ݸͷ۠ผͰ͖ΔϘʔϧΛ

    k ݸͷ۠ผͰ͖Δശʹೖ ΕΔํ๏͸Կ௨Γ͋Δ͔ʁ ▶ ͲͷϘʔϧ΋ɼඞ͍ͣͣΕ͔ͷശʹೖΕΔ ▶ Ͳͷശʹ΋ 1 ͭҎ্ͷϘʔϧΛೖΕΔ ▶ 1 ≤ n ≤ 103 ▶ 1 ≤ k ≤ 103 ग़య : AOJ DPL_5_C Ball and Boxes 3 Link αϯϓϧ ೖྗ 1 : JT1 ग़ྗ: JT1 ೖྗ 2 : JT1 ग़ྗ: JT1 tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 16/78
  21. Ball and Boxes 3 ▶ ͜Ε΋ɼ࠷ॳʹ༨ࣄ৅Λߟ͑ͯΈΑ͏ ▶ ʮͲͷശʹ΋Ϙʔϧ͕ 1 ͭҎ্ೖ͍ͬͯΔʯͷ༨ࣄ৅͸ʁ

    ▶ ʮগͳ͘ͱ΋ 1 ͭͷശʹ͍ͭͯɼϘʔϧ͕ೖ͍ͬͯͳ͍ʯ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 17/78
  22. Ball and Boxes 3 ▶ ͜Ε΋ɼ࠷ॳʹ༨ࣄ৅Λߟ͑ͯΈΑ͏ ▶ ʮͲͷശʹ΋Ϙʔϧ͕ 1 ͭҎ্ೖ͍ͬͯΔʯͷ༨ࣄ৅͸ʁ

    ▶ ʮগͳ͘ͱ΋ 1 ͭͷശʹ͍ͭͯɼϘʔϧ͕ೖ͍ͬͯͳ͍ʯ ▶ Ϙʔϧ͕ઈରʹೖΒͳ͍ͱ͜ΖΛܾΊଧ͍ͪͨ͠ ▶ ઌ΄Ͳͷ໰୊ͱ΄΅ಉ͡ղ͖ํʹͳΔʂ ▶ ͔͠͠ࠓճ͸ू߹ͷ਺͕ͱͯ΋ଟ͍ (103 ݸ) ͷͰɼbit ԋࢉͰશ෦ࢼ͢ ͷ͸ෆՄೳʂ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 17/78
  23. Ball and Boxes 3 ▶ ͜Ε΋ɼ࠷ॳʹ༨ࣄ৅Λߟ͑ͯΈΑ͏ ▶ ʮͲͷശʹ΋Ϙʔϧ͕ 1 ͭҎ্ೖ͍ͬͯΔʯͷ༨ࣄ৅͸ʁ

    ▶ ʮগͳ͘ͱ΋ 1 ͭͷശʹ͍ͭͯɼϘʔϧ͕ೖ͍ͬͯͳ͍ʯ ▶ Ϙʔϧ͕ઈରʹೖΒͳ͍ͱ͜ΖΛܾΊଧ͍ͪͨ͠ ▶ ઌ΄Ͳͷ໰୊ͱ΄΅ಉ͡ղ͖ํʹͳΔʂ ▶ ͔͠͠ࠓճ͸ू߹ͷ਺͕ͱͯ΋ଟ͍ (103 ݸ) ͷͰɼbit ԋࢉͰશ෦ࢼ͢ ͷ͸ෆՄೳʂ ▶ ରশੑ Λ࢖͓͏ʂʂ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 17/78
  24. Ball and Boxes 3 ▶ ྫ: n ݸͷϘʔϧΛ k =

    3 ݸͷശʹೖΕΔ ▶ 3 ݸͷശͷ͏ͪɼઈରʹೖΕͳ͍ͱ͜ΖΛ 1 ݸܾΊͯ৔߹ͷ਺Λܭࢉ ▶ ശ A ʹઈରʹϘʔϧΛೖΕͳ͍Α͏ʹ͢Δ৔߹ͷ਺͸ʁ ▶ ೖΕΔ৔ॴͷީิ͕ k − 1 ௨ΓͰɼͦΕΛ n ճ΍ΔͷͰɾɾɾ ▶ (k − 1)n = 2n ௨Γ 箱 A 箱 B 箱 C tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 18/78
  25. Ball and Boxes 3 ▶ ྫ: n ݸͷϘʔϧΛ k =

    3 ݸͷശʹೖΕΔ ▶ 3 ݸͷശͷ͏ͪɼઈରʹೖΕͳ͍ͱ͜ΖΛ 1 ݸܾΊͯ৔߹ͷ਺Λܭࢉ ▶ ശ B ʹઈରʹϘʔϧΛೖΕͳ͍Α͏ʹ͢Δ৔߹ͷ਺͸ʁ ▶ ೖΕΔ৔ॴͷީิ͕ k − 1 ௨ΓͰɼͦΕΛ n ճ΍ΔͷͰɾɾɾ ▶ (k − 1)n = 2n ௨Γ 箱 A 箱 B 箱 C tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 19/78
  26. Ball and Boxes 3 ▶ ྫ: n ݸͷϘʔϧΛ k =

    3 ݸͷശʹೖΕΔ ▶ 3 ݸͷശͷ͏ͪɼઈରʹೖΕͳ͍ͱ͜ΖΛ 1 ݸܾΊͯ৔߹ͷ਺Λܭࢉ ▶ ശ C ʹઈରʹϘʔϧΛೖΕͳ͍Α͏ʹ͢Δ৔߹ͷ਺͸ʁ ▶ ೖΕΔ৔ॴͷީิ͕ k − 1 ௨ΓͰɼͦΕΛ n ճ΍ΔͷͰɾɾɾ ▶ (k − 1)n = 2n ௨Γ 箱 A 箱 B 箱 C tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 20/78
  27. Ball and Boxes 3 ▶ ઈରʹೖΕͳ͍ശͷݸ਺͕ಉ͡ͳΒ͹ɼ৔߹ͷ਺͸ಉ͡ ▶ ઌ΄ͲͷྫͰ͸ɼശ A ͷΈɾശ

    B ͷΈɾശ C ͷΈʹઈରʹϘʔϧΛ ೖΕͳ͍Α͏ʹ͢Δ৔߹ͷ਺͸શͯ౳͔ͬͨ͠ ▶ combination Λ࢖͏ͱɼ͜ΕΒΛ·ͱΊͯॲཧͰ͖Δʂʂ ▶ ઌ΄Ͳͷྫͩͱɼ3 C1 2n = 3 × 2n ௨Γɼͱ·ͱΊͯٻΊΒΕΔ ▶ ശͷݸ਺ʹରͯ͠ࢦ਺ݸ͋ͬͨঢ়ଶ͕ɼઢܗݸʹվળ͞Εͨʂ ରশੑ શମͰ n ݸ͋Δू߹͔Β k ݸબͼͱͬͨू߹ಉ࢜ͷ intersection ͷཁૉ਺ ͕શͯ౳͍͠ͱ͖ɼcombination Ͱ·ͱΊͯܭࢉՄೳͰ͋Δੑ࣭ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 21/78
  28. Ball and Boxes 3 ࣮૷ (C++) ▶ ༨ஊͰ͕͢ɼ͜ͷ੍໿ԼͳΒ DP Ͱ΋ղ͚·͢

    (ৄࡉ͸ུ) tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 22/78
  29. lahub and Permutations lahub and Permutations ௕͞ N ͷॱྻ {a1,

    a2, . . . , an } ͕ɼҰ෦͖݀͋ͷঢ়ଶͰ༩͑ΒΕΔɽॱྻ ͷ೚ҙͷཁૉʹରͯ͠ ai ̸= i ʹͳΔΑ͏ʹॱྻ಺ͷ݀ΛຒΊΔ͜ͱΛߟ͑ Δɽ࡞ΕΔॱྻ͸Կ௨Γ͋Δ͔ʁ ▶ 2 ≤ N ≤ 2, 000 ग़య : Codeforces Round #198 E Link αϯϓϧ ೖྗ 1 : JT1 ग़ྗ: JT1 ▶ 1, 2, 5 ݸ໨ʹ͕݀։͍͍ͯΔ ▶ ৚݅Λຬͨ͢ॱྻ͸ {2, 5, 4, 3, 1} ͱɼ {5, 1, 4, 3, 2} tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 23/78
  30. lahub and Permutations ▶ ͜ͷ໰୊΋ɼઌ΄Ͳͷ໰୊ͱߟ͑ํ͸΄΅ಉ͡ʂ ▶ ༨ࣄ৅Λߟ͑Α͏ ▶ ʮai =

    i Ͱ͋ΔՕॴ͕গͳ͘ͱ΋ 1 ՕॴҎ্ଘࡏ͢Δʯॱྻ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 24/78
  31. lahub and Permutations ▶ ͜ͷ໰୊΋ɼઌ΄Ͳͷ໰୊ͱߟ͑ํ͸΄΅ಉ͡ʂ ▶ ༨ࣄ৅Λߟ͑Α͏ ▶ ʮai =

    i Ͱ͋ΔՕॴ͕গͳ͘ͱ΋ 1 ՕॴҎ্ଘࡏ͢Δʯॱྻ ▶ ai = i ʹͳΔՄೳੑͷ͋Δ৔ॴ͸͍ͭ͋͘Δ͔ߟ͑Δ ▶ ʮ݀ͷݸ਺ʯͱ౳͘͠͸ͳ͍ͷͰ஫ҙʂʂ ▶ ྫ͑͹ॱྻ͕ {E, 1, E} ͷ৔߹ɼ݀͸ 2 ͕ͭͩ ai = i ʹͳΔՄೳੑ͕͋ Δཁૉ͸ 3 ͷΈͳͷͰ 1 ݸ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 24/78
  32. lahub and Permutations ▶ ͜ͷ໰୊΋ɼઌ΄Ͳͷ໰୊ͱߟ͑ํ͸΄΅ಉ͡ʂ ▶ ༨ࣄ৅Λߟ͑Α͏ ▶ ʮai =

    i Ͱ͋ΔՕॴ͕গͳ͘ͱ΋ 1 ՕॴҎ্ଘࡏ͢Δʯॱྻ ▶ ai = i ʹͳΔՄೳੑͷ͋Δ৔ॴ͸͍ͭ͋͘Δ͔ߟ͑Δ ▶ ʮ݀ͷݸ਺ʯͱ౳͘͠͸ͳ͍ͷͰ஫ҙʂʂ ▶ ྫ͑͹ॱྻ͕ {E, 1, E} ͷ৔߹ɼ݀͸ 2 ͕ͭͩ ai = i ʹͳΔՄೳੑ͕͋ Δཁૉ͸ 3 ͷΈͳͷͰ 1 ݸ ▶ ai = i ʹͳΔཁૉͷݸ਺ΛܾΊଧͪ͢Δͱɼ͜Ε͸ରশੑ͕੒Γཱͭ ͷͰɼ·ͱΊͯॲཧͰ͖Δʂ ▶ ͋ͱ͸૊Έ߹ΘͤΛ଍͠Ҿ͖͢Ε͹ྑ͍ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 24/78
  33. lahub and Permutations Α͋͘Δ (ͱࢥΘΕΔ) ࣭໰ ▶ ݁ہɼai = i

    ʹͳΔՄೳੑͷ͋Δ৔ॴ͸Ͳ͏਺͑Δͷʁ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 25/78
  34. lahub and Permutations Α͋͘Δ (ͱࢥΘΕΔ) ࣭໰ ▶ ݁ہɼai = i

    ʹͳΔՄೳੑͷ͋Δ৔ॴ͸Ͳ͏਺͑Δͷʁ ▶ i ൪໨ͷΠϯσοΫε͕ۭ͍͓ͯΓɼ͔ͭ݀Ͱͳ͍ཁૉͱͯࣗ͠વ਺ i ͕࢖ΘΕ͍ͯͳ͚Ε͹ɼai = i ʹͳΔՄೳੑ͕͋Δ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 25/78
  35. lahub and Permutations Α͋͘Δ (ͱࢥΘΕΔ) ࣭໰ ▶ ݁ہɼai = i

    ʹͳΔՄೳੑͷ͋Δ৔ॴ͸Ͳ͏਺͑Δͷʁ ▶ i ൪໨ͷΠϯσοΫε͕ۭ͍͓ͯΓɼ͔ͭ݀Ͱͳ͍ཁૉͱͯࣗ͠વ਺ i ͕࢖ΘΕ͍ͯͳ͚Ε͹ɼai = i ʹͳΔՄೳੑ͕͋Δ ▶ ai = i ʹͳΔཁૉͷݸ਺Λ k ݸͱܾΊଧͪͨ͠ޙ͸ɼͲ͏଍ͤ͹Α ͍ͷʁ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 25/78
  36. lahub and Permutations Α͋͘Δ (ͱࢥΘΕΔ) ࣭໰ ▶ ݁ہɼai = i

    ʹͳΔՄೳੑͷ͋Δ৔ॴ͸Ͳ͏਺͑Δͷʁ ▶ i ൪໨ͷΠϯσοΫε͕ۭ͍͓ͯΓɼ͔ͭ݀Ͱͳ͍ཁૉͱͯࣗ͠વ਺ i ͕࢖ΘΕ͍ͯͳ͚Ε͹ɼai = i ʹͳΔՄೳੑ͕͋Δ ▶ ai = i ʹͳΔཁૉͷݸ਺Λ k ݸͱܾΊଧͪͨ͠ޙ͸ɼͲ͏଍ͤ͹Α ͍ͷʁ ▶ ҎԼɼ݀ͷݸ਺Λ A ͱ͠ɼai = i ʹͳΔՄೳੑ͕͋Δཁૉͷݸ਺Λ B ͱ͢Δ 1. B ݸͷީิ͔Β k ݸΛ͖࣋ͬͯͨͷͰ B Ck ௨Γ 2. ݀ͷݸ਺͸ A ݸ͕ͩͬͨɼͦͷ͏ͪ k ݸ͸ຒ·͍ͬͯΔͷͰɼ࢒Γͷཁ ૉͷ഑ஔύλʔϯ͕ (A − k)! ௨Γ 3. ͋ͱ͸ɼk ͷۮحΛݟͯ଍͠Ҿ͖ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 25/78
  37. LCM Rush LCM Rush 2 ͭͷਖ਼੔਺ N, K ͕༩͑ΒΕΔͷͰɼ1 Ҏ্

    N ҎԼͷ͢΂ͯͷ੔਺ i ʹ ͍ͭͯ LCM(i, K) ΛٻΊɼͦͷ߹ܭΛٻΊΑɽ͜͜ͰɼLCM(a, b) ͱ͸ a ͱ b ͷ࠷খެഒ਺Λࢦ͢ɽ ▶ 1 ≤ N, K ≤ 109 ग़య : AtCoder Beginner Contest 020 D Link αϯϓϧ ೖྗ 1 : JT1 ग़ྗ: JT1 ▶ LCM(1, 2)+LCM(2, 2)+LCM(3, 2)+LCM(4, 2) = 2+2+6+4 = 14 ▶ ͲͷΑ͏ͳΞϓϩʔνͰղ͍͍͔ͯ͘ʁ ▶ (ώϯτ: LCM Λ͙ͬͱʹΒΉͱɾɾɾʁ ) tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 28/78
  38. LCM Rush ▶ ٻΊΔ΋ͷ ˠ ∑ N i=1 LCM(i, K)

    tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 29/78
  39. LCM Rush ▶ ٻΊΔ΋ͷ ˠ ∑ N i=1 LCM(i, K)

    ▶ ·ͣɼLCM ͩͱѻ͍ͮΒ͍ͷͰ GCD (࠷େެ໿਺) ʹม͑ͯΈΑ͏ ▶ LCM(a, b) = ab GCD(a,b) ▶ ٻΊΔ΋ͷ վ ˠ K ∑N i=1 i GCD(i,K) tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 29/78
  40. LCM Rush ▶ ٻΊΔ΋ͷ ˠ ∑ N i=1 LCM(i, K)

    ▶ ·ͣɼLCM ͩͱѻ͍ͮΒ͍ͷͰ GCD (࠷େެ໿਺) ʹม͑ͯΈΑ͏ ▶ LCM(a, b) = ab GCD(a,b) ▶ ٻΊΔ΋ͷ վ ˠ K ∑N i=1 i GCD(i,K) ▶ ͜͜ͰɼGCD ͷऔΓ͏Δ஋ͷݸ਺ʹ͍ͭͯߟ͑ͯΈΑ͏ ▶ औΓ͏Δ஋͸ɼK ͷ໿਺ʹݶΒΕΔ ▶ K ≤ 109 ΑΓɼ͜ͷݸ਺͸࠷େͰ΋ 1, 344 ݸ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 29/78
  41. LCM Rush ▶ ٻΊΔ΋ͷ ˠ ∑ N i=1 LCM(i, K)

    ▶ ·ͣɼLCM ͩͱѻ͍ͮΒ͍ͷͰ GCD (࠷େެ໿਺) ʹม͑ͯΈΑ͏ ▶ LCM(a, b) = ab GCD(a,b) ▶ ٻΊΔ΋ͷ վ ˠ K ∑N i=1 i GCD(i,K) ▶ ͜͜ͰɼGCD ͷऔΓ͏Δ஋ͷݸ਺ʹ͍ͭͯߟ͑ͯΈΑ͏ ▶ औΓ͏Δ஋͸ɼK ͷ໿਺ʹݶΒΕΔ ▶ K ≤ 109 ΑΓɼ͜ͷݸ਺͸࠷େͰ΋ 1, 344 ݸ ▶ ಉ͡ GCD ΛऔΔ΋ͷಉ࢜͸ɼ·ͱΊͯܭࢉͰ͖ͦ͏ ▶ ஫໨͢Δ GCD ͷ஋Λ g Λ͓͘ ▶ ∑ 1≤i≤N,GCD(i,K)=g i g = ∑ 1≤i≤⌊ N g ⌋,GCD(i, K g )=1 i ▶ K ∑ 1≤i≤⌊ N g ⌋,GCD(i, K g )=1 i Λ·ͱΊͯܭࢉͰ͖Δͱخ͍͠ ▶ ͜Ε͕ߴ଎ʹٻΊΒΕΔͷͳΒɼݩͷࣜΛ GCD ͷछྨ͝ͱʹ෼ղ͢Δ͜ ͱͰߴ଎ʹॲཧՄೳ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 29/78
  42. LCM Rush ▶ GCD ͕ಉ͡ཁૉͷ࿨͸ɼͲͷΑ͏ʹߴ଎ʹٻΊΒΕΔʁ ▶ ͜Ε͸ॳڃฤͰ΍ͬͨแআͱ࣮࣭ಉ͡ (૯࿨ύʔτΛ޻෉͢Ε͹ OK) GCD

    ͕ಉ͡ཁૉͷ࿨ΛแআݪཧͰٻΊΔྫ ▶ GCD(12, i) = 1 ʹͳΔɼ12 ҎԼͷࣗવ਺ i ͷ࿨ (౴͑͸ 24) ▶ 1 ͔Β 12 ·Ͱͷ૯࿨͸ 12(12+1) 2 = 78 ▶ ૉҼ਺͸ 2 ͱ 3 ▶ 2 ΛૉҼ਺ͱͯ࣋ͭ͠ཁૉͷ࿨ ˠ 2 + 4 + 6 + 8 + 10 + 12 = 42 ▶ ཁૉͷ਺͸ 12 2 = 6 ݸ (ॳ߲ 2 ެࠩ 2 ͷ౳ࠩ਺ྻঢ়) ▶ ૯࿨͸ 2 × 6(6+1) 2 = 42 ▶ 3 ΛૉҼ਺ͱͯ࣋ͭ͠ཁૉͷ࿨ ˠ 3 + 6 + 9 + 12 = 30 ▶ ཁૉͷ਺͸ 12 3 = 4 ݸ (ॳ߲ 3 ެࠩ 3 ͷ౳ࠩ਺ྻঢ়) ▶ ૯࿨͸ 3 × 4(4+1) 2 = 30 ▶ 2, 3 ΛૉҼ਺ͱͯ࣋ͭ͠ཁૉͷ࿨ ˠ 6 + 12 = 18 ▶ Ҏ্Λ౿·͑ͯ 78 − 42 − 30 + 18 = 24 (͔֬ʹҰக) tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 30/78
  43. LCM Rush ͜͜·ͰΛ·ͱΊΔͱɾɾɾ 1. ݩͷࣜΛมܗͯ͠ɼLCM Ͱ͸ͳ͘ GCD Ͱߟ͑Δ 2. K

    ͱͷ GCD ͷύλʔϯ਺͕গͳ͍͜ͱΛར༻ͯࣜ͠Λ෼ղ͠ɼGCD ͝ͱʹ·ͱΊͯॲཧ 3. ཁૉͷ࿨ͷแআݪཧ΋ɼ͜Ε·Ͱ঺հͨ͠แআݪཧ + গ͠਺ֶΛؤு ΔͱՄೳ ࣍ʹ۩ମతͳ࣮૷Λͷͤ·͢ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 31/78
  44. Enumeration Enumeration n ݸͷ੔਺ a1, a2, . . . ,

    an ͱ n ݸͷ੔਺ p1, p2, . . . , pn , ੔਺ m ͕༩͑ΒΕ Δɽk ൪໨ͷ੔਺ ak Λ pk % ͷ֬཰ͰબͿͱ͍͏ૢ࡞Λ֤ k ʹ͍ͭͯߦ ͍ɼ͍͔ͭ͘੔਺Λબͼग़͢ɽm ҎԼͷࣗવ਺ͷதͰɼબ͹Εͨ੔਺ͷগ ͳ͘ͱ΋ 1 ͭͰׂΓ੾ΕΔ΋ͷͷݸ਺ͷظ଴஋ΛٻΊΑɽ ▶ 1 ≤ n ≤ 20 ▶ 1 ≤ m ≤ 1018 ▶ 1 ≤ ak ≤ 1018 ▶ 1 ≤ pk ≤ 99 ग़య : AOJ 2446 Link αϯϓϧ ೖྗ 1 : JT1 ग़ྗ: JT1 tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 33/78
  45. Enumeration ▶ n ݸͷ੔਺ͷू߹Λ W ͱ͓͖ɼ͜Εʹର͠ ▶ W ͷ෦෼ू߹Λ S

    ͱ͢Δ ▶ S ͷݩͷগͳ͘ͱ΋ 1 ͭͰׂΓ੾ΕΔࣗવ਺ͷݸ਺Λ VS ͱ͢Δ ▶ ू߹͕ S ʹͳΔ֬཰Λ PS ͱ͢Δ ▶ ٻΊΔظ଴஋ E ͸ҎԼͷΑ͏ʹॻ͚Δ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 34/78
  46. Enumeration ▶ n ݸͷ੔਺ͷू߹Λ W ͱ͓͖ɼ͜Εʹର͠ ▶ W ͷ෦෼ू߹Λ S

    ͱ͢Δ ▶ S ͷݩͷগͳ͘ͱ΋ 1 ͭͰׂΓ੾ΕΔࣗવ਺ͷݸ਺Λ VS ͱ͢Δ ▶ ू߹͕ S ʹͳΔ֬཰Λ PS ͱ͢Δ ▶ ٻΊΔظ଴஋ E ͸ҎԼͷΑ͏ʹॻ͚Δ ▶ E = ∑ S⊆W PS ∗ VS ▶ ͜ͷظ଴஋ΛٻΊΔʹ͸ɼͲΜͳܭࢉ͕ඞཁʁ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 34/78
  47. Enumeration ▶ n ݸͷ੔਺ͷू߹Λ W ͱ͓͖ɼ͜Εʹର͠ ▶ W ͷ෦෼ू߹Λ S

    ͱ͢Δ ▶ S ͷݩͷগͳ͘ͱ΋ 1 ͭͰׂΓ੾ΕΔࣗવ਺ͷݸ਺Λ VS ͱ͢Δ ▶ ू߹͕ S ʹͳΔ֬཰Λ PS ͱ͢Δ ▶ ٻΊΔظ଴஋ E ͸ҎԼͷΑ͏ʹॻ͚Δ ▶ E = ∑ S⊆W PS ∗ VS ▶ ͜ͷظ଴஋ΛٻΊΔʹ͸ɼͲΜͳܭࢉ͕ඞཁʁ ▶ PS ͷܭࢉ (͜Ε͸؆୯) ▶ VS ͷܭࢉ (͜Ε͸ͪΐͬͱ͍ͨ΁Μ) ▶ VS ͸ʮগͳ͘ͱ΋ 1 ͭʯ͔Β΋Θ͔ΔΑ͏ʹ࿨ू߹Ͱ͋Δ ▶ แআݪཧͰॲཧͰ͖ͦ͏ ▶ ܭࢉྔ͸େৎ෉ʁ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 34/78
  48. Enumeration ▶ n ݸͷ੔਺ͷू߹Λ W ͱ͓͖ɼ͜Εʹର͠ ▶ W ͷ෦෼ू߹Λ S

    ͱ͢Δ ▶ S ͷݩͷগͳ͘ͱ΋ 1 ͭͰׂΓ੾ΕΔࣗવ਺ͷݸ਺Λ VS ͱ͢Δ ▶ ू߹͕ S ʹͳΔ֬཰Λ PS ͱ͢Δ ▶ ٻΊΔظ଴஋ E ͸ҎԼͷΑ͏ʹॻ͚Δ ▶ E = ∑ S⊆W PS ∗ VS ▶ ͜ͷظ଴஋ΛٻΊΔʹ͸ɼͲΜͳܭࢉ͕ඞཁʁ ▶ PS ͷܭࢉ (͜Ε͸؆୯) ▶ VS ͷܭࢉ (͜Ε͸ͪΐͬͱ͍ͨ΁Μ) ▶ VS ͸ʮগͳ͘ͱ΋ 1 ͭʯ͔Β΋Θ͔ΔΑ͏ʹ࿨ू߹Ͱ͋Δ ▶ แআݪཧͰॲཧͰ͖ͦ͏ ▶ ܭࢉྔ͸େৎ෉ʁ ˠ ࣮͸େৎ෉͡Όͳ͍ɾɾɾ ▶ ܭࢉྔΛߟ͑ͯΈΑ͏ ▶ W ͷ෦෼ू߹͸ 2n ௨Γ ▶ ෦෼ू߹ͦΕͧΕʹ͍ͭͯแআݪཧΛద༻͠ͳ͚Ε͹ͳΒͳ͍ ▶ શͯͷ෦෼ू߹ʹରͯ͠ɼͦͷ෦෼ू߹ΛݟΔ͜ͱ͸શମͰ O(3n) ͔ ͔Γɼ͜Εͩͱ஗͍ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 34/78
  49. ߴ଎θʔλม׵ɾߴ଎ϝϏ΢εม׵ ߴ଎θʔλม׵ɾߴ଎ϝϏ΢εม׵ ▶ ҎԼͷؔ਺Λ༻ҙ ▶ f(S) := ू߹ S ʹରͯ͠ఆٛ͞ΕΔؔ਺

    ▶ ߴ଎θʔλม׵ʹΑΓҎԼͷؔ਺͕ߴ଎ʹٻΊΒΕΔ 1. g(S) = ∑ S⊆T f(T) ▶ S Λ෦෼ू߹ͱͯ࣋ͭ͠ू߹ T ͷؔ਺஋ f(T) ͷ૯࿨ 2. g′(S) = ∑ T ′⊆S f(T′) ▶ S ͷ೚ҙͷ෦෼ू߹ T′ ͷؔ਺஋ f(T′) ͷ૯࿨ ▶ ߴ଎ϝϏ΢εม׵ʹΑΓҎԼͷؔ਺͕ߴ଎ʹٻΊΒΕΔ 3. f(S) = ∑ S⊆T g(T) × (−1)|T \S| ▶ 1. ͷٯม׵ʹ૬౰͢Δ΋ͷ 4. f(S) = ∑ T ′⊆S g′(T′) × (−1)|S\T ′| ▶ 2. ͷٯม׵ʹ૬౰͢Δ΋ͷ ▶ ਅ໘໨ʹ΍Δͱ O(3n) Ͱ͋Δॲཧ͕ O(n2n) ʹͳΔ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 36/78
  50. ߴ଎θʔλม׵ɾߴ଎ϝϏ΢εม׵ Ͳͷίʔυ΋ඇৗʹ؆ܿʹॻ͚Δ 1. g(S) = ∑ S⊆T f(T) (ߴ଎θʔλม׵) for(int

    i=0; i<N; i++) for(int bit=0; bit <(1<<N); bit++) { if(!(bit >> i & 1)) func[bit] += func[bit ^ (1<<i)]; } 2. g′(S) = ∑ T′⊆S f(T′) (ߴ଎θʔλม׵) for(int i=0; i<N; i++) for(int bit=0; bit <(1<<N); bit++) { if(bit >> i & 1) func[bit] += func[bit ^ (1<<i)]; } 3. f(S) = ∑ S⊆T g(T) × (−1)|T\S| (ߴ଎ϝϏ΢εม׵) for(int i=0; i<N; i++) for(int bit=0; bit <(1<<N); bit++) { if(!(bit >> i & 1)) func[bit] -= func[bit ^ (1<<i)]; } 4. f(S) = ∑ T′⊆S g′(T′) × (−1)|S\T′| (ߴ଎ϝϏ΢εม׵) for(int i=0; i<N; i++) for(int bit=0; bit <(1<<N); bit++) { if(bit >> i & 1) func[bit] -= func[bit ^ (1<<i)]; } tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 37/78
  51. ߴ଎θʔλม׵ɾߴ଎ϝϏ΢εม׵ ߴ଎θʔλม׵ g(S) = ∑ S⊆T f(T) ʹ͍ͭͯΈ͍ͯ͜͏ for(int i=0;

    i<N; i++) for(int bit=0; bit <(1<<N); bit++) { if(!(bit >> i & 1)) func[bit] += func[bit ^ (1<<i)]; } ࠷ॳ͸ɼࣗ਎ͷ f ͷ஋ͷΈ͕ೖ͍ͬͯΔ ▶ g {000} : f {000} ▶ g {001} : f {001} ▶ g {010} : f {010} ▶ g {011} : f {011} ▶ g {100} : f {100} ▶ g {101} : f {101} ▶ g {110} : f {110} ▶ g {111} : f {111} tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 39/78
  52. ߴ଎θʔλม׵ɾߴ଎ϝϏ΢εม׵ ߴ଎θʔλม׵ g(S) = ∑ S⊆T f(T) ʹ͍ͭͯΈ͍ͯ͜͏ for(int i=0;

    i<N; i++) for(int bit=0; bit <(1<<N); bit++) { if(!(bit >> i & 1)) func[bit] += func[bit ^ (1<<i)]; } i = 0 ͷϧʔϓऴྃޙ (0 Ϗοτ໨͕ҧ͏΋ͷ͕଍͞ΕΔ) ▶ g {000} : f {000} +f {001} ▶ g {001} : f {001} ▶ g {010} : f {010} +f {011} ▶ g {011} : f {011} ▶ g {100} : f {100} +f {101} ▶ g {101} : f {101} ▶ g {110} : f {110} +f {111} ▶ g {111} : f {111} tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 39/78
  53. ߴ଎θʔλม׵ɾߴ଎ϝϏ΢εม׵ ߴ଎θʔλม׵ g(S) = ∑ S⊆T f(T) ʹ͍ͭͯΈ͍ͯ͜͏ for(int i=0;

    i<N; i++) for(int bit=0; bit <(1<<N); bit++) { if(!(bit >> i & 1)) func[bit] += func[bit ^ (1<<i)]; } i = 1 ͷϧʔϓऴྃޙ (1 Ϗοτ໨͕ҧ͏΋ͷ͕଍͞ΕΔ) ▶ g {000} : f {000} +f {001} +f {010} + f {011} ▶ g {001} : f {001} +f {011} ▶ g {010} : f {010} +f {011} ▶ g {011} : f {011} ▶ g {100} : f {100} +f {101} +f {110} + f {111} ▶ g {101} : f {101} +f {111} ▶ g {110} : f {110} +f {111} ▶ g {111} : f {111} tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 39/78
  54. ߴ଎θʔλม׵ɾߴ଎ϝϏ΢εม׵ ߴ଎θʔλม׵ g(S) = ∑ S⊆T f(T) ʹ͍ͭͯΈ͍ͯ͜͏ for(int i=0;

    i<N; i++) for(int bit=0; bit <(1<<N); bit++) { if(!(bit >> i & 1)) func[bit] += func[bit ^ (1<<i)]; } i = 2 ͷϧʔϓऴྃޙ (2 Ϗοτ໨͕ҧ͏΋ͷ͕଍͞ΕΔ) ▶ g {000} : f {000} +f {001} +f {010} + f {011} +f {100} + f {101} + f {110} + f {111} ▶ g {001} : f {001} +f {011} +f {101} + f {111} ▶ g {010} : f {010} +f {011} +f {110} + f {111} ▶ g {011} : f {011} +f {111} ▶ g {100} : f {100} +f {101} +f {110} + f {111} ▶ g {101} : f {101} +f {111} ▶ g {110} : f {110} +f {111} ▶ g {111} : f {111} tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 39/78
  55. ߴ଎θʔλม׵ɾߴ଎ϝϏ΢εม׵ ߴ଎θʔλม׵ g′(S) = ∑ T′⊆S f(T′) ʹ͍ͭͯΈ͍ͯ͜͏ for(int i=0;

    i<N; i++) for(int bit=0; bit <(1<<N); bit++) { if(bit >> i & 1) func[bit] += func[bit ^ (1<<i)]; } ࠷ॳ͸ɼࣗ਎ͷ f ͷ஋ͷΈ͕ೖ͍ͬͯΔ ▶ g′ {000} : f {000} ▶ g′ {001} : f {001} ▶ g′ {010} : f {010} ▶ g′ {011} : f {011} ▶ g′ {100} : f {100} ▶ g′ {101} : f {101} ▶ g′ {110} : f {110} ▶ g′ {111} : f {111} tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 40/78
  56. ߴ଎θʔλม׵ɾߴ଎ϝϏ΢εม׵ ߴ଎θʔλม׵ g′(S) = ∑ T′⊆S f(T′) ʹ͍ͭͯΈ͍ͯ͜͏ for(int i=0;

    i<N; i++) for(int bit=0; bit <(1<<N); bit++) { if(bit >> i & 1) func[bit] += func[bit ^ (1<<i)]; } i = 0 ͷϧʔϓऴྃޙ (0 Ϗοτ໨͕ҧ͏΋ͷ͕଍͞ΕΔ) ▶ g′ {000} : f {000} ▶ g′ {001} : f {000} + f {001} ▶ g′ {010} : f {010} ▶ g′ {011} : f {010} + f {011} ▶ g′ {100} : f {100} ▶ g′ {101} : f {100} + f {101} ▶ g′ {110} : f {110} ▶ g′ {111} : f {110} +f {111} tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 40/78
  57. ߴ଎θʔλม׵ɾߴ଎ϝϏ΢εม׵ ߴ଎θʔλม׵ g′(S) = ∑ T′⊆S f(T′) ʹ͍ͭͯΈ͍ͯ͜͏ for(int i=0;

    i<N; i++) for(int bit=0; bit <(1<<N); bit++) { if(bit >> i & 1) func[bit] += func[bit ^ (1<<i)]; } i = 1 ͷϧʔϓऴྃޙ (1 Ϗοτ໨͕ҧ͏΋ͷ͕଍͞ΕΔ) ▶ g′ {000} : f {000} ▶ g′ {001} : f {000} + f {001} ▶ g′ {010} : f {000} + f {010} ▶ g′ {011} : f {000} + f {001} + f {010} + f {011} ▶ g′ {100} : f {100} ▶ g′ {101} : f {100} + f {101} ▶ g′ {110} : f {100} + f {110} ▶ g′ {111} : f {100} + f {101} +f {110} +f {111} tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 40/78
  58. ߴ଎θʔλม׵ɾߴ଎ϝϏ΢εม׵ ߴ଎θʔλม׵ g′(S) = ∑ T′⊆S f(T′) ʹ͍ͭͯΈ͍ͯ͜͏ for(int i=0;

    i<N; i++) for(int bit=0; bit <(1<<N); bit++) { if(bit >> i & 1) func[bit] += func[bit ^ (1<<i)]; } i = 2 ͷϧʔϓऴྃޙ (2 Ϗοτ໨͕ҧ͏΋ͷ͕଍͞ΕΔ) ▶ g′ {000} : f {000} ▶ g′ {001} : f {000} + f {001} ▶ g′ {010} : f {000} + f {010} ▶ g′ {011} : f {000} + f {001} + f {010} + f {011} ▶ g′ {100} : f {000} + f {100} ▶ g′ {101} : f {000} + f {001} + f {100} + f {101} ▶ g′ {110} : f {000} + f {010} + f {100} + f {110} ▶ g′ {111} : f {000} + f {001} + f {010} + f {011} +f {100} + f {101} +f {110} +f {111} tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 40/78
  59. ఱԼҰϘσΟʔϏϧίϯςετ ఱԼҰϘσΟʔϏϧίϯςετ ௕͞ N ͷ੔਺ྻ A = {a1, a2, .

    . . , aN } ͱɼશཁૉ͕ 0 ͷ௕͞ N ͷ਺ྻ B ͕͋Δɽ਺ྻ B ʹରͯ͠ҎԼͷૢ࡞Λ D ճߦ͏ɽ ▶ B தͷཁૉΛ͍ͣΕ͔ͻͱͭબͼɼ਺஋Λ 1 ૿Ճͤ͞Δɽ ࠷ऴతʹͰ͖Δ਺ྻ B ͷ೚ҙͷཁૉ bi ʹ͍ͭͯɼbi ≥ ai Λຬͨ͢Α͏ʹ ͍ͨ͠ɽ͜ͷΑ͏ͳૢ࡞ํ๏͕Կ௨Γ͋Δ͔ٻΊΑɽ ▶ 1 ≤ N ≤ 30 ▶ 1 ≤ D ≤ 109 ▶ 1 ≤ ai ≤ 30 ग़య : ఱԼҰϓϩάϥϚʔίϯςετ 2013 ܾউ D Link αϯϓϧ ೖྗ 1 : JT1 ग़ྗ: JT1 ▶ {1, 1, 2}ɾ{1, 2, 1}ɾ{1, 2, 2}ɾ{2, 1, 1}ɾ{2, 1, 2}ɾ{2, 2, 1} ͷ 6 ௨Γ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 43/78
  60. ఱԼҰϘσΟʔϏϧίϯςετ ▶ ʮ೚ҙͷཁૉ bi ʹ͍ͭͯ bi ≥ ai ʯͷ༨ࣄ৅Λߟ͑Δͱʁ ▶

    ʮগͳ͘ͱ΋ 1 ͭͷཁૉ bi ʹ͍ͭͯ bi < ai ʯ ▶ bi < ai ͱͳΔཁૉͷݸ਺ΛܾΊଧͪ (j ݸ) ▶ ࢒Γ N − j ݸʹؔͯ͠͸Ͳ͏Ͱ΋ྑ͘ͳΔ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 44/78
  61. ఱԼҰϘσΟʔϏϧίϯςετ ▶ ʮ೚ҙͷཁૉ bi ʹ͍ͭͯ bi ≥ ai ʯͷ༨ࣄ৅Λߟ͑Δͱʁ ▶

    ʮগͳ͘ͱ΋ 1 ͭͷཁૉ bi ʹ͍ͭͯ bi < ai ʯ ▶ bi < ai ͱͳΔཁૉͷݸ਺ΛܾΊଧͪ (j ݸ) ▶ ࢒Γ N − j ݸʹؔͯ͠͸Ͳ͏Ͱ΋ྑ͘ͳΔ ▶ ରশੑ͸੒Γཱͨͳͦ͞͏ͩ͠ɼN ≤ 30 ͳͷͰ۪௚ʹ΍Δͱ TLE ▶ ಈతܭը๏Λ༻͍ͯঢ়ଶΛ·ͱΊΔ͜ͱΛߟ͑Α͏ʂʂ ▶ ݟΔ΂͖ঢ়ଶͷύϥϝʔλΛ୯७ʹ͠ɼ·ͱΊΒΕΔ΋ͷ͸·ͱΊΔ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 44/78
  62. ఱԼҰϘσΟʔϏϧίϯςετ ▶ แআݪཧͰͲΜͳ৘ใ͕ඞཁʹͳΔ͔ߟ͑ͯɼDP Λ૊ΈཱͯΑ͏ ▶ ଍͠Ҿ͖࣌͸ू߹ͷཁૉ਺͕ॏཁʹͳΔͷͰɼͦΕ͸͓͖͍֮͑ͯͨ ▶ แআͰߟྀ͢Δཁૉʹରͯ͠Կճૢ࡞͢Δ͔΋஌Γ͍ͨ ▶ dp[i][j][k]

    := i ൪໨·Ͱͷཁૉͷ͏ͪ j छྨΛแআ಺Ͱߟྀ͠ɼͦΕ Βʹରͯ͠߹ܭ k ճૢ࡞͢Δ৔߹ͷ਺ ͱ͢Δ ▶ ͜ͷ DP Λ͢Δ͜ͱʹΑͬͯɼҎԼͷΑ͏ʹแআύʔτΛॲཧՄೳ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 45/78
  63. ఱԼҰϘσΟʔϏϧίϯςετ ▶ แআݪཧͰͲΜͳ৘ใ͕ඞཁʹͳΔ͔ߟ͑ͯɼDP Λ૊ΈཱͯΑ͏ ▶ ଍͠Ҿ͖࣌͸ू߹ͷཁૉ਺͕ॏཁʹͳΔͷͰɼͦΕ͸͓͖͍֮͑ͯͨ ▶ แআͰߟྀ͢Δཁૉʹରͯ͠Կճૢ࡞͢Δ͔΋஌Γ͍ͨ ▶ dp[i][j][k]

    := i ൪໨·Ͱͷཁૉͷ͏ͪ j छྨΛแআ಺Ͱߟྀ͠ɼͦΕ Βʹରͯ͠߹ܭ k ճૢ࡞͢Δ৔߹ͷ਺ ͱ͢Δ ▶ ͜ͷ DP Λ͢Δ͜ͱʹΑͬͯɼҎԼͷΑ͏ʹแআύʔτΛॲཧՄೳ ▶ แআͰ࢖༻ j छྨɾͦΕҎ֎ N − j छྨͱ෼͚ΒΕΔ ▶ ૢ࡞͸แআͰ࢖༻͢ΔཁૉͰ k ճɾͦΕҎ֎Ͱ D − k ճ 1 4 1 3 2 5 5 7 2 6 包除で j 種類考慮、操作 k 回 それ以外 N - j 種類、操作 D- k 回 1 4 1 3 2 5 5 7 2 6 数字決め打ち → 位置シャッフル のようなイメージ ※位置シャッフルとは、赤ブロックの間に灰ブロックを順番を守りながら挿入すること tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 45/78
  64. ఱԼҰϘσΟʔϏϧίϯςετ ▶ แআݪཧͰͲΜͳ৘ใ͕ඞཁʹͳΔ͔ߟ͑ͯɼDP Λ૊ΈཱͯΑ͏ ▶ ଍͠Ҿ͖࣌͸ू߹ͷཁૉ਺͕ॏཁʹͳΔͷͰɼͦΕ͸͓͖͍֮͑ͯͨ ▶ แআͰߟྀ͢Δཁૉʹରͯ͠Կճૢ࡞͢Δ͔΋஌Γ͍ͨ ▶ dp[i][j][k]

    := i ൪໨·Ͱͷཁૉͷ͏ͪ j छྨΛแআ಺Ͱߟྀ͠ɼͦΕ Βʹରͯ͠߹ܭ k ճૢ࡞͢Δ৔߹ͷ਺ ͱ͢Δ ▶ ͜ͷ DP Λ͢Δ͜ͱʹΑͬͯɼҎԼͷΑ͏ʹแআύʔτΛॲཧՄೳ ▶ แআͰ࢖༻ j छྨɾͦΕҎ֎ N − j छྨͱ෼͚ΒΕΔ ▶ ૢ࡞͸แআͰ࢖༻͢ΔཁૉͰ k ճɾͦΕҎ֎Ͱ D − k ճ ▶ แআͰ࢖༻͢ΔྖҬ (੺৭) ͷ૊Έ߹Θͤ͸ DP ͰٻΊΒΕ͍ͯΔ ▶ ͦΕҎ֎ͷྖҬ (փ৭) Ͱ͸ɼ·ͣͲͷཁૉʹૢ࡞͢Δ͔ΛશܾͯΊɼ ͦͷޙʹ੺ྖҬͷؒʹૠೖ͢ΔΠϝʔδͰૢ࡞ྻΛશ௨Γྻڍ 1 4 1 3 2 5 5 7 2 6 包除で j 種類考慮、操作 k 回 それ以外 N - j 種類、操作 D- k 回 1 4 1 3 2 5 5 7 2 6 数字決め打ち → 位置シャッフル のようなイメージ ※位置シャッフルとは、赤ブロックの間に灰ブロックを順番を守りながら挿入すること tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 45/78
  65. ఱԼҰϘσΟʔϏϧίϯςετ dp[i][j][k] ͔Βͷঢ়ଶભҠ͸Ͳ͏ͳΔ͔ʁ ▶ แআݪཧ಺Ͱ i ൪໨ͷཁૉΛߟྀ͠ͳ͍৔߹ ▶ ߟྀ͢Δछྨ਺΋ɼแআͰߟྀ͢Δཁૉʹର͢Δૢ࡞ճ਺΋ෆม ▶

    dp[i + 1][j][k] ʹରͯͦ͠ͷ··଍ͤ͹ྑ͍ ▶ แআݪཧ಺Ͱ i ൪໨ͷཁૉΛߟྀ͢Δ৔߹ ▶ ߟྀ͢Δछྨ਺͕૿͑Δ ▶ แআͰߟྀ͢Δཁૉʹର͢Δૢ࡞ճ਺͸૿͑Δ͔มΘΒͳ͍ ▶ i ൪໨ͷཁૉʹରͯ͠ x ճ (0 ≤ x < ai) ૢ࡞ͨ͠ͱ͢Δ ▶ ݩʑͷ৚݅Λຬͨ͞ͳ͍΋ͷΛ࡞Γ͍ͨͷͰૢ࡞͸ ai ճະຬ ▶ ૢ࡞ճ਺ͷ߹ܭ͸ k + x ճʹͳΔ ▶ طଘͷૢ࡞ྻͷͲ͔͜ʹ x ճͷૢ࡞Λૠೖ (k+x Cx ௨Γ) ▶ dp[i + 1][j + 1][k + x] ʹରͯ͠ɼk+x Cx dp[i][j][k] ௨Γ଍ͤ͹ྑ͍ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 46/78
  66. ఱԼҰϘσΟʔϏϧίϯςετ ͜ͷ DP Λ͢Δ͜ͱʹΑͬͯɼҎԼͷΑ͏ʹแআύʔτΛॲཧՄೳ (࠶ܝ) ▶ แআͰ࢖༻ j छྨɾͦΕҎ֎ N

    − j छྨͱ෼͚ΒΕΔ ▶ ૢ࡞͸แআͰ࢖༻͢ΔཁૉͰ k ճɾͦΕҎ֎Ͱ D − k ճ ▶ แআͰ࢖༻͢ΔྖҬ (੺৭) ͷ૊Έ߹Θͤ͸ DP ͰٻΊΒΕ͍ͯΔ ▶ ͦΕҎ֎ͷྖҬ (փ৭) Ͱ͸ɼ·ͣͲͷཁૉʹૢ࡞͢Δ͔ΛશܾͯΊɼ ͦͷޙʹ੺ྖҬͷؒʹૠೖ͢ΔΠϝʔδͰૢ࡞ྻΛશ௨Γྻڍ 1 4 1 3 2 5 5 7 2 6 包除で j 種類考慮、操作 k 回 それ以外 N - j 種類、操作 D- k 回 1 4 1 3 2 5 5 7 2 6 数字決め打ち → 位置シャッフル のようなイメージ ※位置シャッフルとは、赤ブロックの間に灰ブロックを順番を守りながら挿入すること tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 47/78
  67. ఱԼҰϘσΟʔϏϧίϯςετ ͭ·ΓɼDP ͷ݁ՌΛ༻͍ͯ౴͑ΛಘΔʹ͸ʁ ▶ શͯͷ j, k ʹ͍ͭͯҎԼΛߦ͏ ▶ dp[N][j][k]

    (แআ j छྨɾૢ࡞ k ճ) ͷ૊Έ߹ΘͤΛ࣋ͬͯ͘Δ 1 4 1 3 2 5 5 7 2 6 包除で j 種類考慮、操作 k 回 それ以外 N - j 種類、操作 D- k 回 1 4 1 3 2 5 5 7 2 6 数字決め打ち → 位置シャッフル のようなイメージ ※位置シャッフルとは、赤ブロックの間に灰ブロックを順番を守りながら挿入すること tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 48/78
  68. ఱԼҰϘσΟʔϏϧίϯςετ ͭ·ΓɼDP ͷ݁ՌΛ༻͍ͯ౴͑ΛಘΔʹ͸ʁ ▶ શͯͷ j, k ʹ͍ͭͯҎԼΛߦ͏ ▶ dp[N][j][k]

    (แআ j छྨɾૢ࡞ k ճ) ͷ૊Έ߹ΘͤΛ࣋ͬͯ͘Δ ▶ ࢒ͬͨ D − k ճͷ֤ૢ࡞ʹ͍ͭͯɼN − j छྨͷ͏ͪͲΕʹׂΓ౰ͯ Δ͔ܾఆ ▶ N − j ௨ΓऔΕΔ΋ͷ͕ D − k ݸ͋ΔͷͰɼ(N − j)D−k 1 4 1 3 2 5 5 7 2 6 包除で j 種類考慮、操作 k 回 それ以外 N - j 種類、操作 D- k 回 1 4 1 3 2 5 5 7 2 6 数字決め打ち → 位置シャッフル のようなイメージ ※位置シャッフルとは、赤ブロックの間に灰ブロックを順番を守りながら挿入すること tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 48/78
  69. ఱԼҰϘσΟʔϏϧίϯςετ ͭ·ΓɼDP ͷ݁ՌΛ༻͍ͯ౴͑ΛಘΔʹ͸ʁ ▶ શͯͷ j, k ʹ͍ͭͯҎԼΛߦ͏ ▶ dp[N][j][k]

    (แআ j छྨɾૢ࡞ k ճ) ͷ૊Έ߹ΘͤΛ࣋ͬͯ͘Δ ▶ ࢒ͬͨ D − k ճͷ֤ૢ࡞ʹ͍ͭͯɼN − j छྨͷ͏ͪͲΕʹׂΓ౰ͯ Δ͔ܾఆ ▶ N − j ௨ΓऔΕΔ΋ͷ͕ D − k ݸ͋ΔͷͰɼ(N − j)D−k ▶ D − k ճͷૢ࡞Λ k ճͷૢ࡞ྻதʹૠೖ͢Δ ▶ ૊Έ߹Θͤ͸ D Ck ௨Γ͋Δ 1 4 1 3 2 5 5 7 2 6 包除で j 種類考慮、操作 k 回 それ以外 N - j 種類、操作 D- k 回 1 4 1 3 2 5 5 7 2 6 数字決め打ち → 位置シャッフル のようなイメージ ※位置シャッフルとは、赤ブロックの間に灰ブロックを順番を守りながら挿入すること tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 48/78
  70. ఱԼҰϘσΟʔϏϧίϯςετ ͭ·ΓɼDP ͷ݁ՌΛ༻͍ͯ౴͑ΛಘΔʹ͸ʁ ▶ શͯͷ j, k ʹ͍ͭͯҎԼΛߦ͏ ▶ dp[N][j][k]

    (แআ j छྨɾૢ࡞ k ճ) ͷ૊Έ߹ΘͤΛ࣋ͬͯ͘Δ ▶ ࢒ͬͨ D − k ճͷ֤ૢ࡞ʹ͍ͭͯɼN − j छྨͷ͏ͪͲΕʹׂΓ౰ͯ Δ͔ܾఆ ▶ N − j ௨ΓऔΕΔ΋ͷ͕ D − k ݸ͋ΔͷͰɼ(N − j)D−k ▶ D − k ճͷૢ࡞Λ k ճͷૢ࡞ྻதʹૠೖ͢Δ ▶ ૊Έ߹Θͤ͸ D Ck ௨Γ͋Δ ▶ ͜ΕͰಘΒΕͨ஋Λɼj ͷۮحʹԠͯ͡౴͑ʹ଍͠Ҿ͖͢Δ 1 4 1 3 2 5 5 7 2 6 包除で j 種類考慮、操作 k 回 それ以外 N - j 種類、操作 D- k 回 1 4 1 3 2 5 5 7 2 6 数字決め打ち → 位置シャッフル のようなイメージ ※位置シャッフルとは、赤ブロックの間に灰ブロックを順番を守りながら挿入すること tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 48/78
  71. แআݪཧͷ໰୊ɾ্ڃฤ ▶ ͔͜͜Β͸แআݪཧ্ڃฤͰ͢ ▶ AtCoder Ͱݴ͏ͱ͜Ζͷ 1000 ఺લޙͷ໰୊Λѻ͍·͢ ▶ ߟ࡯͕ॏ͍

    + ଞͷςΫχοΫͱͷ૊Έ߹Θ͕ͤଟ͍Ͱ͢ ▶ ಈతܭը๏ʹΑͬͯঢ়ଶΛ·ͱΊΔ ▶ ໿਺ܥแআ ͳͲͳͲ ▶ આ໌͕ଟͯ͘εϥΠυͷຕ਺΋ଟ͍Ͱ͕͢ɼ͕Μ͹Γ·͠ΐ͏ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 50/78
  72. ग़੮൪߸ (2) ग़੮൪߸ (2) ௕͞ N ͷॱྻΛ࡞Γ͍ͨɽ ʮi ൪໨͸͋Δ஋ Ai

    ʹͰ͖ͳ͍ʯͱ͍͏੍໿ ͕ɼશͯͷ i ʹ͍ͭͯ 1 ͭͣͭ͋Δɽ͜ΕΛશͯຬͨ͢Α͏ͳॱྻ͸Կ௨ Γ͋Δ͔ʁ ▶ 1 ≤ N ≤ 5000 ▶ 0 ≤ Ai ≤ 4999 ग़య : yukicoder No.243 Link αϯϓϧ ೖྗ 1 : JT1 ग़ྗ: JT1 ೖྗ 2 : JT1 ग़ྗ: JT1 tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 51/78
  73. ग़੮൪߸ (2) ▶ ·ͣ৚݅Λݴ͍׵͑Α͏ ▶ ༨ࣄ৅ʮ͋Δ i ʹ͍ͭͯɼ਺ྻͷ஋͕ Ai ͱ౳͍͠ʯ

    ▶ ू߹Λશͯࢼ͢ͷ͸੍໿্ෆՄೳͳͷͰɼঢ়ଶΛ·ͱΊ͍ͨ ▶ Ai ͱඞͣ౳͘͠ͳΔཁૉ͕ k ݸ͋ΔΑ͏ͳঢ়ଶ਺ΛٻΊΕ͹Αͦ͞͏ ▶ ͜Ε͕෼͔Ε͹ɼแআݪཧͰ౴͑ΛٻΊΒΕΔ ▶ ରশੑ͸੒Γཱͪͦ͏ʹͳ͍ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 52/78
  74. ग़੮൪߸ (2) ▶ ·ͣ৚݅Λݴ͍׵͑Α͏ ▶ ༨ࣄ৅ʮ͋Δ i ʹ͍ͭͯɼ਺ྻͷ஋͕ Ai ͱ౳͍͠ʯ

    ▶ ू߹Λશͯࢼ͢ͷ͸੍໿্ෆՄೳͳͷͰɼঢ়ଶΛ·ͱΊ͍ͨ ▶ Ai ͱඞͣ౳͘͠ͳΔཁૉ͕ k ݸ͋ΔΑ͏ͳঢ়ଶ਺ΛٻΊΕ͹Αͦ͞͏ ▶ ͜Ε͕෼͔Ε͹ɼแআݪཧͰ౴͑ΛٻΊΒΕΔ ▶ ରশੑ͸੒Γཱͪͦ͏ʹͳ͍ ▶ Ͳ͏΍ͬͨΒ͜ͷঢ়ଶ਺ΛٻΊΒΕΔ͔ʁ ▶ ಈతܭը๏ͰղܾͰ͖Δʂ ▶ ࣍ϖʔδ͔ΒৄࡉΛઆ໌͠·͢ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 52/78
  75. ग़੮൪߸ (2) ▶ ྫ͑͹ɼ͋Δ 1 ͭͷ਺ x ʹ͍ͭͯ৚݅Λඞͣҧ൓͍ͤͨ͞ͱ͖ 1 0

    5 0 2 4 1 3 3 3 tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 53/78
  76. ग़੮൪߸ (2) ▶ ྫ͑͹ɼ͋Δ 1 ͭͷ਺ x ʹ͍ͭͯ৚݅Λඞͣҧ൓͍ͤͨ͞ͱ͖ ▶ x

    ͕ېࢭ͞Ε͍ͯΔཁૉ਺Λ਺͑Δ (Cx ݸ͋Δͱ͢Δ) ▶ ͦͷΑ͏ͳཁૉͷ͏ͪɼ͍ͣΕ͔ 1 ͭʹ x Λ഑ஔͤ͞Δ 1 0 5 0 2 4 1 3 3 3 例えば 1 について、必ず条件に違反するように配置する場合・・・ ・ 1 が禁止されている要素の数を求め (下の例では 2 通り)、その内のいずれかに 1 を配置 ・ あとの並びはどうでも良いので (N - 1)! を掛け合わせる tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 53/78
  77. ग़੮൪߸ (2) ▶ ྫ͑͹ɼ͋Δ 1 ͭͷ਺ x ʹ͍ͭͯ৚݅Λඞͣҧ൓͍ͤͨ͞ͱ͖ ▶ x

    ͕ېࢭ͞Ε͍ͯΔཁૉ਺Λ਺͑Δ (Cx ݸ͋Δͱ͢Δ) ▶ ͦͷΑ͏ͳཁૉͷ͏ͪɼ͍ͣΕ͔ 1 ͭʹ x Λ഑ஔͤ͞Δ ▶ ͦΕҎ֎ͷཁૉʹؔͯ͠͸Կ͕དྷͯ΋ྑ͍ ▶ x ͚ͩ΋͏഑ஔઌ͕ܾ·͓ͬͯΓɼͦΕҎ֎͸ະఆ ▶ (N − 1)! ௨Γ͋Δ 1 0 5 0 2 4 1 3 3 3 例えば 1 について、必ず条件に違反するように配置する場合・・・ ・ 1 が禁止されている要素の数を求め (下の例では 2 通り)、その内のいずれかに 1 を配置 ・ あとの並びはどうでも良いので (N - 1)! を掛け合わせる tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 53/78
  78. ग़੮൪߸ (2) ▶ ྫ͑͹ɼ͋Δ 1 ͭͷ਺ x ʹ͍ͭͯ৚݅Λඞͣҧ൓͍ͤͨ͞ͱ͖ ▶ x

    ͕ېࢭ͞Ε͍ͯΔཁૉ਺Λ਺͑Δ (Cx ݸ͋Δͱ͢Δ) ▶ ͦͷΑ͏ͳཁૉͷ͏ͪɼ͍ͣΕ͔ 1 ͭʹ x Λ഑ஔͤ͞Δ ▶ ͦΕҎ֎ͷཁૉʹؔͯ͠͸Կ͕དྷͯ΋ྑ͍ ▶ x ͚ͩ΋͏഑ஔઌ͕ܾ·͓ͬͯΓɼͦΕҎ֎͸ະఆ ▶ (N − 1)! ௨Γ͋Δ ▶ Αͬͯɼx ʹ͍ͭͯඞͣҧ൓ͤ͞Δͱ͖ͷ৔߹ͷ਺͸ Cx(N − 1)! ௨Γ 1 0 5 0 2 4 1 3 3 3 例えば 1 について、必ず条件に違反するように配置する場合・・・ ・ 1 が禁止されている要素の数を求め (下の例では 2 通り)、その内のいずれかに 1 を配置 ・ あとの並びはどうでも良いので (N - 1)! を掛け合わせる tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 53/78
  79. ग़੮൪߸ (2) ▶ ͜Ε͸ɼඞͣҧ൓͍ͤͨ͞਺͕ෳ਺ݸ͋ͬͯ΋ಉ༷ʹͰ͖Δʂ ▶ ͳ͔ͥʁ 1 0 5 0

    2 4 1 3 3 3 tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 54/78
  80. ग़੮൪߸ (2) ▶ ͜Ε͸ɼඞͣҧ൓͍ͤͨ͞਺͕ෳ਺ݸ͋ͬͯ΋ಉ༷ʹͰ͖Δʂ ▶ ͳ͔ͥʁ ▶ ೚ҙͷҟͳΔ 2 ͭͷ਺

    x, y ʹ͍ͭͯɼx ͕ېࢭ͞Ε͍ͯΔཁૉͷΠϯ σοΫεͱ y ͕ېࢭ͞Ε͍ͯΔཁૉͷΠϯσοΫε͕ඃΒͳ͍ (ͭ·Γ ಠཱ) ͨΊ 1 0 5 0 2 4 1 3 3 3 1 と 3 について、必ず条件に違反するように配置する場合・・・ ・ 1 が禁止されている要素の数を求め (下の例では 2 通り)、その内のいずれかに 1 を配置 ・ 3 が禁止されている要素の数を求め (下の例では 3 通り)、その内のいずれかに 3 を配置 ・ あとの並びはどうでも良いので (N - 2)! を掛け合わせる tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 54/78
  81. ग़੮൪߸ (2) ▶ ͜Ε͸ɼඞͣҧ൓͍ͤͨ͞਺͕ෳ਺ݸ͋ͬͯ΋ಉ༷ʹͰ͖Δʂ ▶ ͳ͔ͥʁ ▶ ೚ҙͷҟͳΔ 2 ͭͷ਺

    x, y ʹ͍ͭͯɼx ͕ېࢭ͞Ε͍ͯΔཁૉͷΠϯ σοΫεͱ y ͕ېࢭ͞Ε͍ͯΔཁૉͷΠϯσοΫε͕ඃΒͳ͍ (ͭ·Γ ಠཱ) ͨΊ ▶ ͕ͨͬͯ͠ɼҧ൓͍ͤͨ͞਺͕ x1, x2, . . . , xm Ͱ͋Δ৔߹ɼ͜ΕΒΛ ඞͣҧ൓ͤ͞Δͱ͖ͷ৔߹ͷ਺͸ ∏ m i=1 Cxi (N − m)! ௨Γ 1 0 5 0 2 4 1 3 3 3 1 と 3 について、必ず条件に違反するように配置する場合・・・ ・ 1 が禁止されている要素の数を求め (下の例では 2 通り)、その内のいずれかに 1 を配置 ・ 3 が禁止されている要素の数を求め (下の例では 3 通り)、その内のいずれかに 3 を配置 ・ あとの並びはどうでも良いので (N - 2)! を掛け合わせる tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 54/78
  82. ग़੮൪߸ (2) ▶ ͜ΕΒΛ౿·͑ͯɼͲͷΑ͏ͳ DP Λ૊ΈཱͯΕ͹ྑ͍͔ʁ ▶ dp[k] := ඞͣҧ൓͍ͤͨ͞਺͕

    k ݸͷͱ͖ͷ ∏ k i=1 Cxi ͷ߹ܭ ͱ͢Δ ▶ ͜Ε͸ O(N2) Ͱ࣮ݱՄೳ ▶ dp[i ൪໨·Ͱݟͨ][ඞͣҧ൓͢Δ਺͕ k छྨ] ͷೋ࣍ݩͰ΍Δͱ͢Δ ▶ dp[i][k] ͔ΒͷભҠΛߟ͑ͯΈΑ͏ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 55/78
  83. ग़੮൪߸ (2) ▶ ͜ΕΒΛ౿·͑ͯɼͲͷΑ͏ͳ DP Λ૊ΈཱͯΕ͹ྑ͍͔ʁ ▶ dp[k] := ඞͣҧ൓͍ͤͨ͞਺͕

    k ݸͷͱ͖ͷ ∏ k i=1 Cxi ͷ߹ܭ ͱ͢Δ ▶ ͜Ε͸ O(N2) Ͱ࣮ݱՄೳ ▶ dp[i ൪໨·Ͱݟͨ][ඞͣҧ൓͢Δ਺͕ k छྨ] ͷೋ࣍ݩͰ΍Δͱ͢Δ ▶ dp[i][k] ͔ΒͷભҠΛߟ͑ͯΈΑ͏ ▶ i + 1 ൪໨ͷཁૉΛඞͣҧ൓͍ͤͨ͞ͱ͖ ▶ ࠓ·Ͱͷঢ়ଶશͯʹର͠ Cxi+1 Λֻ͚߹ΘͤΔΠϝʔδͳͷͰɾɾɾ ▶ dp[i + 1][k + 1] ʹ dp[i][k] × Cxi+1 Λ଍͜͠Ή tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 55/78
  84. ग़੮൪߸ (2) ▶ ͜ΕΒΛ౿·͑ͯɼͲͷΑ͏ͳ DP Λ૊ΈཱͯΕ͹ྑ͍͔ʁ ▶ dp[k] := ඞͣҧ൓͍ͤͨ͞਺͕

    k ݸͷͱ͖ͷ ∏ k i=1 Cxi ͷ߹ܭ ͱ͢Δ ▶ ͜Ε͸ O(N2) Ͱ࣮ݱՄೳ ▶ dp[i ൪໨·Ͱݟͨ][ඞͣҧ൓͢Δ਺͕ k छྨ] ͷೋ࣍ݩͰ΍Δͱ͢Δ ▶ dp[i][k] ͔ΒͷભҠΛߟ͑ͯΈΑ͏ ▶ i + 1 ൪໨ͷཁૉΛඞͣҧ൓͍ͤͨ͞ͱ͖ ▶ ࠓ·Ͱͷঢ়ଶશͯʹର͠ Cxi+1 Λֻ͚߹ΘͤΔΠϝʔδͳͷͰɾɾɾ ▶ dp[i + 1][k + 1] ʹ dp[i][k] × Cxi+1 Λ଍͜͠Ή ▶ ͦ͏Ͱͳ͍ͱ͖ ▶ dp[i + 1][k] ʹ dp[i][k] Λ଍͜͠Ή tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 55/78
  85. ग़੮൪߸ (2) ▶ ͜ΕΒΛ౿·͑ͯɼͲͷΑ͏ͳ DP Λ૊ΈཱͯΕ͹ྑ͍͔ʁ ▶ dp[k] := ඞͣҧ൓͍ͤͨ͞਺͕

    k ݸͷͱ͖ͷ ∏ k i=1 Cxi ͷ߹ܭ ͱ͢Δ ▶ ͜Ε͸ O(N2) Ͱ࣮ݱՄೳ ▶ dp[i ൪໨·Ͱݟͨ][ඞͣҧ൓͢Δ਺͕ k छྨ] ͷೋ࣍ݩͰ΍Δͱ͢Δ ▶ dp[i][k] ͔ΒͷભҠΛߟ͑ͯΈΑ͏ ▶ i + 1 ൪໨ͷཁૉΛඞͣҧ൓͍ͤͨ͞ͱ͖ ▶ ࠓ·Ͱͷঢ়ଶશͯʹର͠ Cxi+1 Λֻ͚߹ΘͤΔΠϝʔδͳͷͰɾɾɾ ▶ dp[i + 1][k + 1] ʹ dp[i][k] × Cxi+1 Λ଍͜͠Ή ▶ ͦ͏Ͱͳ͍ͱ͖ ▶ dp[i + 1][k] ʹ dp[i][k] Λ଍͜͠Ή ▶ (ຊ౰ʹೋ࣍ݩ഑ྻͰ΍ΔͱϝϞϦ͕଍Γͳ͍ͷͰ஫ҙ) ▶ Ұ࣍ݩ഑ྻͱ͔Ͱ࣮૷͠·͠ΐ͏ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 55/78
  86. Rotated Palindromes Rotated Palindromes ௕͕͞ N Ͱɼ֤ཁૉ͕ 1 Ҏ্ K

    ҎԼͰɼ਺ྻશମ͕ճจͰ͋ΔΑ͏ͳ਺ ྻ A ʹରͯ͠ɼ࣍ͷૢ࡞Λ޷͖ͳ͚ͩ܁Γฦ͢ɽ ▶ A ͷઌ಄ཁૉΛ຤ඌ΁Ҡಈ (ͭ·Γճస) ࠷ऴతͳ਺ྻͱͯ͠ߟ͑ΒΕΔ΋ͷ͸͍ͭ͋͘Δ͔ʁ ▶ 1 ≤ N, K ≤ 109 ग़య : AtCoder Regular Contest 064 F Link αϯϓϧ ೖྗ 1 : JT1 ग़ྗ: JT1 ೖྗ 2 : JT1 ग़ྗ: JT1 ▶ ೖྗ 1 ʹ͍ͭͯɼ࣍ͷ 6 ௨Γ ▶ {1, 1, 1, 1}ɾ{1, 1, 2, 2}ɾ{1, 2, 2, 1}ɾ{2, 2, 1, 1}ɾ{2, 1, 1, 2}ɾ{2, 2, 2, 2} tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 57/78
  87. Rotated Palindromes ▶ ·ͣॏཁͳΞϓϩʔνͱͯ͠ɼ ʮ໿਺Λߟྀ͢Δ͜ͱʯ͕͋Δ ▶ ճసૢ࡞ʹΑΔӨڹΛߟྀ͢Δͱɼے͕ྑ͍ߟ࡯ ▶ ճจΛͳ͢௕͞ N

    ͷ਺ྻશମ͕ɼ͋Δ௕͞ d ͷ਺ྻ S ͷ܁Γฦ͠ʹ Αͬͯߏ੒͞ΕΔͱ͢Δ ▶ d ͷީิ͸ N ͷ໿਺ͷΈ (શମͷ௕͕ͪ͞ΐ͏Ͳ N ͳͷͰ) ▶ पظ d ͳͷͰɼճసૢ࡞Λ d ճ͢Δͱݩʹ໭Δ ▶ S ͸ɼd ະຬͷपظΛ࣋ͨͳ͍΋ͷͷΈߟྀ͢Δ ▶ ͭ·ΓɺS ͷ࠷খपظ͸ d Ͱ͋Δ ▶ ਺ྻͷઌ಄ d ݸͱ຤ඌ d ݸ͸ಉҰͳͷͰɼS ΋ճจ s s s s ・回文をなす数列全体は、長さ d の数列 s の繰り返しでできている ・s も回文である 数列全体 tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 58/78
  88. Rotated Palindromes ▶ पظΛ d ʹݻఆͨ͠ͱ͢Δ ▶ ·ͣɼ௕͕͞ d Ͱ͋ͬͯճจʹͳΔΑ͏ͳ਺ྻ͸Կ௨Γ͋Δ͔ʁ

    ▶ ճจͳͷͰɼ਺Λܾఆ͢΂͖৔ॴ͸ ⌈d 2 ⌉ Օॴ ▶ ਺͸ 1 Ҏ্ K ҎԼ͔Βબ୒ՄೳͰ͋ΔͨΊɼK⌈ d 2 ⌉ ௨Γଘࡏ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 59/78
  89. Rotated Palindromes ▶ पظΛ d ʹݻఆͨ͠ͱ͢Δ ▶ ·ͣɼ௕͕͞ d Ͱ͋ͬͯճจʹͳΔΑ͏ͳ਺ྻ͸Կ௨Γ͋Δ͔ʁ

    ▶ ճจͳͷͰɼ਺Λܾఆ͢΂͖৔ॴ͸ ⌈d 2 ⌉ Օॴ ▶ ਺͸ 1 Ҏ্ K ҎԼ͔Βબ୒ՄೳͰ͋ΔͨΊɼK⌈ d 2 ⌉ ௨Γଘࡏ ▶ ௕͞ d Ͱ͋ͬͯɼ d ະຬͷपظΛ࣋ͨͳ͍਺ྻ͸ K⌈ d 2 ⌉ ௨Γ͔ʁ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 59/78
  90. Rotated Palindromes ▶ पظΛ d ʹݻఆͨ͠ͱ͢Δ ▶ ·ͣɼ௕͕͞ d Ͱ͋ͬͯճจʹͳΔΑ͏ͳ਺ྻ͸Կ௨Γ͋Δ͔ʁ

    ▶ ճจͳͷͰɼ਺Λܾఆ͢΂͖৔ॴ͸ ⌈d 2 ⌉ Օॴ ▶ ਺͸ 1 Ҏ্ K ҎԼ͔Βબ୒ՄೳͰ͋ΔͨΊɼK⌈ d 2 ⌉ ௨Γଘࡏ ▶ ௕͞ d Ͱ͋ͬͯɼ d ະຬͷपظΛ࣋ͨͳ͍਺ྻ͸ K⌈ d 2 ⌉ ௨Γ͔ʁ ▶ ͜Ε͸ӕ ▶ ͜ͷ··ͩͱ d ະຬͷपظΛ࣋ͭ਺ྻ΋Χ΢ϯτͯ͠͠·͍ͬͯΔ ▶ ྫ͑͹ d = 4, K = 3 Ͱ͋Δ৔߹ɼK⌈ d 2 ⌉ ௨Γͷ਺ྻͷதʹ͸ {1, 1, 1, 1}ɾ{2, 2, 2, 2}ɾ{3, 3, 3, 3} ͱ͍ͬͨɼपظ͕ 1 Ͱ͋Δ΋ͷ΋ؚ ·Ε͍ͯΔ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 59/78
  91. Rotated Palindromes ▶ पظΛ d ʹݻఆͨ͠ͱ͢Δ ▶ ·ͣɼ௕͕͞ d Ͱ͋ͬͯճจʹͳΔΑ͏ͳ਺ྻ͸Կ௨Γ͋Δ͔ʁ

    ▶ ճจͳͷͰɼ਺Λܾఆ͢΂͖৔ॴ͸ ⌈d 2 ⌉ Օॴ ▶ ਺͸ 1 Ҏ্ K ҎԼ͔Βબ୒ՄೳͰ͋ΔͨΊɼK⌈ d 2 ⌉ ௨Γଘࡏ ▶ ௕͞ d Ͱ͋ͬͯɼ d ະຬͷपظΛ࣋ͨͳ͍਺ྻ͸ K⌈ d 2 ⌉ ௨Γ͔ʁ ▶ ͜Ε͸ӕ ▶ ͜ͷ··ͩͱ d ະຬͷपظΛ࣋ͭ਺ྻ΋Χ΢ϯτͯ͠͠·͍ͬͯΔ ▶ ྫ͑͹ d = 4, K = 3 Ͱ͋Δ৔߹ɼK⌈ d 2 ⌉ ௨Γͷ਺ྻͷதʹ͸ {1, 1, 1, 1}ɾ{2, 2, 2, 2}ɾ{3, 3, 3, 3} ͱ͍ͬͨɼपظ͕ 1 Ͱ͋Δ΋ͷ΋ؚ ·Ε͍ͯΔ ▶ ͕ͨͬͯ͠ɼK⌈ d 2 ⌉ ͔Βɼd ͷ໿਺௕Ͱ͋ΔΑ͏ͳճจΛͳ͢਺ྻͷ૯ ਺ΛҾ͘ඞཁ͕͋Δ ▶ num[d] := ࠷খपظ͕ d Ͱ͋Δճจ਺ྻͷ૯਺ ͱ͢Δ ▶ num[d] = K⌈ d 2 ⌉ − ∑ d′|d,d′̸=d num[d′] tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 59/78
  92. Rotated Palindromes ▶ N ͷ֤໿਺ d ʹ͍ͭͯɼ࠷খपظ͕ d Ͱ͋ΔΑ͏ͳճจ਺ྻͷ૯਺ ͕Θ͔ͬͨ

    ▶ ͋ͱ͸ɼճసૢ࡞ʹΑͬͯͲΕ͚ͩঢ়ଶ਺͕૿͑Δ͔ߟ͑Α͏ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 60/78
  93. Rotated Palindromes ▶ N ͷ֤໿਺ d ʹ͍ͭͯɼ࠷খपظ͕ d Ͱ͋ΔΑ͏ͳճจ਺ྻͷ૯਺ ͕Θ͔ͬͨ

    ▶ ͋ͱ͸ɼճసૢ࡞ʹΑͬͯͲΕ͚ͩঢ়ଶ਺͕૿͑Δ͔ߟ͑Α͏ ▶ ճస͢Δ͜ͱʹΑͬͯɼճจ਺ྻ A ͕ผͷճจ਺ྻ B ͱҰக͢Δ͜ ͱ͸͋Δ͔ʁ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 60/78
  94. Rotated Palindromes ▶ N ͷ֤໿਺ d ʹ͍ͭͯɼ࠷খपظ͕ d Ͱ͋ΔΑ͏ͳճจ਺ྻͷ૯਺ ͕Θ͔ͬͨ

    ▶ ͋ͱ͸ɼճసૢ࡞ʹΑͬͯͲΕ͚ͩঢ়ଶ਺͕૿͑Δ͔ߟ͑Α͏ ▶ ճస͢Δ͜ͱʹΑͬͯɼճจ਺ྻ A ͕ผͷճจ਺ྻ B ͱҰக͢Δ͜ ͱ͸͋Δ͔ʁ ▶ ͜Ε͸ى͜Γ͏Δ ▶ ྫ͑͹ A = {1, 3, 3, 1} Ͱ B = {3, 1, 1, 3} Ͱ͋Δͱ͖ɼA ʹରͯ͠ճ సૢ࡞Λ 2 ճߦ͏ͱ B ͱҰக tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 60/78
  95. Rotated Palindromes ▶ N ͷ֤໿਺ d ʹ͍ͭͯɼ࠷খपظ͕ d Ͱ͋ΔΑ͏ͳճจ਺ྻͷ૯਺ ͕Θ͔ͬͨ

    ▶ ͋ͱ͸ɼճసૢ࡞ʹΑͬͯͲΕ͚ͩঢ়ଶ਺͕૿͑Δ͔ߟ͑Α͏ ▶ ճస͢Δ͜ͱʹΑͬͯɼճจ਺ྻ A ͕ผͷճจ਺ྻ B ͱҰக͢Δ͜ ͱ͸͋Δ͔ʁ ▶ ͜Ε͸ى͜Γ͏Δ ▶ ྫ͑͹ A = {1, 3, 3, 1} Ͱ B = {3, 1, 1, 3} Ͱ͋Δͱ͖ɼA ʹରͯ͠ճ సૢ࡞Λ 2 ճߦ͏ͱ B ͱҰக ▶ ճจ਺ྻʹରͯ͠ճసૢ࡞Λߦͬͨͱ͖ʹɼผͷճจ਺ྻͱҰக͢Δ ৚݅Λߟ͑ͯΈΑ͏ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 60/78
  96. Rotated Palindromes ݁࿦͔Βॻ͘ͱɼҎԼͷΑ͏ʹͳΓ·͢ ࠷খपظ͕ d ͷճจ਺ྻʹର͢Δճసૢ࡞ ▶ d ͕ح਺ͷͱ͖ɼͲͷΑ͏ʹճసͯ͠΋ଞͷճจ਺ྻͱҰக͠ͳ͍ ▶

    d ͕ۮ਺ͷͱ͖ɼճసʹΑͬͯҰக͢Δଞͷճจ਺ྻ͕ͨͩ 1 ͭଘࡏ ࣄ࣮͚ͩड़΂ͯ΋ෆ਌੾ͳͷͰɼূ໌ͯ͠Έ·͠ΐ͏ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 61/78
  97. Rotated Palindromes ▶ ճจ਺ྻ A ʹରͯ͠ճసΛࢪ͢͜ͱͰ B ͱҰக͢Δঢ়گΛߟ͑Δ ▶ ·ͣɼ໌Β͔ʹ

    A ͱ B ͷ࠷খपظ͸౳͍͠ (d ͱ͓͘) ▶ A ͸ճసૢ࡞Λ d ճ͢Δͱݩʹ໭Δ͜ͱ͔ΒɼA ʹରͯ͠ճసૢ࡞Λ 1, 2, . . . , d − 1 ճߦ͏͜ͱͰಘΒΕΔ਺ྻͷ͍ͣΕ͔ 1 ͭͷΈ͕ B ͱ Ұக tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 62/78
  98. Rotated Palindromes ▶ ճจ਺ྻ A ʹରͯ͠ճసΛࢪ͢͜ͱͰ B ͱҰக͢Δঢ়گΛߟ͑Δ ▶ ·ͣɼ໌Β͔ʹ

    A ͱ B ͷ࠷খपظ͸౳͍͠ (d ͱ͓͘) ▶ A ͸ճసૢ࡞Λ d ճ͢Δͱݩʹ໭Δ͜ͱ͔ΒɼA ʹରͯ͠ճసૢ࡞Λ 1, 2, . . . , d − 1 ճߦ͏͜ͱͰಘΒΕΔ਺ྻͷ͍ͣΕ͔ 1 ͭͷΈ͕ B ͱ Ұக ▶ A ʹճసૢ࡞Λ t ճࢪͯ͠ B ͱҰகͨ͠ͱ͢Δ ▶ ࣮͸ɼA ʹٯճసૢ࡞Λ t ճࢪͯ͠΋ B ͱҰக͢Δʂ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 62/78
  99. Rotated Palindromes ▶ ճจ਺ྻ A ʹରͯ͠ճసΛࢪ͢͜ͱͰ B ͱҰக͢Δঢ়گΛߟ͑Δ ▶ ·ͣɼ໌Β͔ʹ

    A ͱ B ͷ࠷খपظ͸౳͍͠ (d ͱ͓͘) ▶ A ͸ճసૢ࡞Λ d ճ͢Δͱݩʹ໭Δ͜ͱ͔ΒɼA ʹରͯ͠ճసૢ࡞Λ 1, 2, . . . , d − 1 ճߦ͏͜ͱͰಘΒΕΔ਺ྻͷ͍ͣΕ͔ 1 ͭͷΈ͕ B ͱ Ұக ▶ A ʹճసૢ࡞Λ t ճࢪͯ͠ B ͱҰகͨ͠ͱ͢Δ ▶ ࣮͸ɼA ʹٯճసૢ࡞Λ t ճࢪͯ͠΋ B ͱҰக͢Δʂ (A ʹ t ճٯૢ࡞ͨ͠਺ྻ) = ( ¯ Aʹ t ճٯૢ࡞ͨ͠਺ྻ) = (A ʹ t ճૢ࡞ͨ͠਺ྻ) = ¯ B = B tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 62/78
  100. Rotated Palindromes ▶ ճจ਺ྻ A ʹରͯ͠ճసΛࢪ͢͜ͱͰ B ͱҰக͢Δঢ়گΛߟ͑Δ ▶ ·ͣɼ໌Β͔ʹ

    A ͱ B ͷ࠷খपظ͸౳͍͠ (d ͱ͓͘) ▶ A ͸ճసૢ࡞Λ d ճ͢Δͱݩʹ໭Δ͜ͱ͔ΒɼA ʹରͯ͠ճసૢ࡞Λ 1, 2, . . . , d − 1 ճߦ͏͜ͱͰಘΒΕΔ਺ྻͷ͍ͣΕ͔ 1 ͭͷΈ͕ B ͱ Ұக ▶ A ʹճసૢ࡞Λ t ճࢪͯ͠ B ͱҰகͨ͠ͱ͢Δ ▶ ࣮͸ɼA ʹٯճసૢ࡞Λ t ճࢪͯ͠΋ B ͱҰக͢Δʂ (A ʹ t ճٯૢ࡞ͨ͠਺ྻ) = ( ¯ Aʹ t ճٯૢ࡞ͨ͠਺ྻ) = (A ʹ t ճૢ࡞ͨ͠਺ྻ) = ¯ B = B ▶ ͭ·ΓɼA ʹճసૢ࡞Λ d − t ճࢪͯ͠΋ B ͱҰக͢Δ͜ͱ͕Θ͔Δ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 62/78
  101. Rotated Palindromes ▶ લϖʔδΑΓɼ(A ʹ t ճૢ࡞ͨ͠਺ྻ) = (A ʹ

    d − t ճૢ࡞ͨ͠਺ྻ) tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 63/78
  102. Rotated Palindromes ▶ લϖʔδΑΓɼ(A ʹ t ճૢ࡞ͨ͠਺ྻ) = (A ʹ

    d − t ճૢ࡞ͨ͠਺ྻ) ▶ A ʹରͯ͠ճసૢ࡞Λ 1, 2, . . . , d − 1 ճߦ͏͜ͱͰಘΒΕΔ਺ྻͷ͍ ͣΕ͔ 1 ͭͷΈ͕ B ͱҰக͢Δ͜ͱ͔Βɼt = d − t ▶ มܗͯ͠ɼt = d 2 tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 63/78
  103. Rotated Palindromes ▶ લϖʔδΑΓɼ(A ʹ t ճૢ࡞ͨ͠਺ྻ) = (A ʹ

    d − t ճૢ࡞ͨ͠਺ྻ) ▶ A ʹରͯ͠ճసૢ࡞Λ 1, 2, . . . , d − 1 ճߦ͏͜ͱͰಘΒΕΔ਺ྻͷ͍ ͣΕ͔ 1 ͭͷΈ͕ B ͱҰக͢Δ͜ͱ͔Βɼt = d − t ▶ มܗͯ͠ɼt = d 2 ▶ d ΋ t ΋੔਺Ͱ͋ΔͨΊɼd ͕ۮ਺ͷ৔߹͸ճస͢Δ͜ͱͰҰக͢Δ ଞͷจࣈྻ͕ͨͩͻͱͭଘࡏ͠ɼح਺ͷ৔߹͸ଘࡏ͠ͳ͍ ▶ Ҏ্Λ૯߹͢Δͱ౴͕͑ग़Δʂ ▶ ܭࢉྔ͸ɼN ͷ໿਺ͷ਺Λ d(N) ͱஔ͘ͱɼO(d(N)2) ▶ N ≤ 109 ͷ্Ͱ͸ɼd(N) ͸࠷େ 1, 344 ݸͳͷͰ໰୊ͳ͍ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 63/78
  104. Everything on It Everything on It N छྨͷτοϐϯά͕Ͱ͖Δϥʔϝϯ͕͋Γɼ֤τοϐϯά͸৐ͤΔ͔൱ ͔બ΂Δɽͭ·Γ 2N

    ௨ΓͷϥʔϝϯΛ஫จͰ͖Δɽ͜ͷͱ͖ɼҎԼͷ৚ ݅Λຬͨ͢Α͏ͳϥʔϝϯͷ૊Έ߹Θͤͷ਺Λ M Ͱׂͬͨ༨ΓΛٻΊΑɽ ͨͩ͠஫จͷॱ൪͸ߟྀ͠ͳ͍΋ͷͱ͢Δɽ 1. τοϐϯάͷ૊Έ߹Θ͕ͤશ͘ಉ͡ϥʔϝϯΛෳ਺ഋ஫จ͠ͳ͍ 2. ֤τοϐϯά͸ɼ஫จͨ͠ϥʔϝϯͷ͏ͪ 2 ഋҎ্ʹ৐͍ͬͯΔ ▶ 2 ≤ N ≤ 3000 ▶ 108 ≤ M ≤ 109 + 9ɼM ͸ૉ਺ ग़య : AtCoder Regular Contest 096 E Link αϯϓϧ ೖྗ 1 : JT1 ग़ྗ: JT1 tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 65/78
  105. Everything on It ▶ ʮ֤τοϐϯά͕ 2 ഋҎ্ʹ৐͍ͬͯΔʯͱ͍͏৚݅͸ѻ͍ͮΒ͍ ▶ ༨ࣄ৅ʮ͋Δ i

    ݸͷτοϐϯάʹ͍ͭͯ 1 ഋҎԼʹ৐͍ͬͯΔʯ ▶ બΜͩ i ݸҎ֎ʹ͍ͭͯ͸Կ΋੍ݶ͕ͳ͍͜ͱʹ஫ҙʂʂ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 66/78
  106. Everything on It ▶ ʮ֤τοϐϯά͕ 2 ഋҎ্ʹ৐͍ͬͯΔʯͱ͍͏৚݅͸ѻ͍ͮΒ͍ ▶ ༨ࣄ৅ʮ͋Δ i

    ݸͷτοϐϯάʹ͍ͭͯ 1 ഋҎԼʹ৐͍ͬͯΔʯ ▶ બΜͩ i ݸҎ֎ʹ͍ͭͯ͸Կ΋੍ݶ͕ͳ͍͜ͱʹ஫ҙʂʂ ▶ τοϐϯάΛબͿݸ਺ i Λશ෦ࢼͦ͏ ▶ τοϐϯά͕ N छྨ͋ΔͷͰɼ0 ͔Β N ·Ͱࢼͤ͹ྑ͍ ▶ τοϐϯάͷछྨʹΑΔ૊Έ߹Θͤ਺ͷҧ͍͸ͳ͍ ˠ ରশੑ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 66/78
  107. Everything on It ▶ ʮ֤τοϐϯά͕ 2 ഋҎ্ʹ৐͍ͬͯΔʯͱ͍͏৚݅͸ѻ͍ͮΒ͍ ▶ ༨ࣄ৅ʮ͋Δ i

    ݸͷτοϐϯάʹ͍ͭͯ 1 ഋҎԼʹ৐͍ͬͯΔʯ ▶ બΜͩ i ݸҎ֎ʹ͍ͭͯ͸Կ΋੍ݶ͕ͳ͍͜ͱʹ஫ҙʂʂ ▶ τοϐϯάΛબͿݸ਺ i Λશ෦ࢼͦ͏ ▶ τοϐϯά͕ N छྨ͋ΔͷͰɼ0 ͔Β N ·Ͱࢼͤ͹ྑ͍ ▶ τοϐϯάͷछྨʹΑΔ૊Έ߹Θͤ਺ͷҧ͍͸ͳ͍ ˠ ରশੑ ▶ Ҏ্Λ౿·͑ΔͱɼҎԼͷΑ͏ͳࣜΛܭࢉ͢Ε͹Α͍͜ͱ͕Θ͔Δ ໰୊ͷ౴͑ͱͳΔࣜ Answer = N ∑ i=0 N Ci(−1)iways(i) ▶ ∑ ˠ i छྨͷτοϐϯάΛ 1 ഋҎԼʹ৐ͤΔ (͜ͷ i Λશͯࢼ͢) ▶ N Ci ˠ 1 ഋҎԼʹ৐ͤΔͷ͸Ͳͷτοϐϯάʁ ▶ ways(i) ˠ i छྨͷτοϐϯάΛඞͣ 1 ഋҎԼʹ৐ͤΔ৔߹ͷ਺ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 66/78
  108. Everything on It ▶ ways(i) ͸Ͳ͏ٻΊΔͷʁ (͕͜͜Ұ൪ͷϙΠϯτ) ▶ ஫จͨ͠ϥʔϝϯશମͰͷ֤τοϐϯάͷ஫จճ਺Λදʹ͢ΔͱҎԼ ͷΑ͏ʹͳΔ

    1 0 0 1 0 2 1 3 3 3 i 種類: 必ず "0" か "1" N-i 種類: 制限なし tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 67/78
  109. Everything on It ▶ ways(i) ͸Ͳ͏ٻΊΔͷʁ (͕͜͜Ұ൪ͷϙΠϯτ) ▶ ஫จͨ͠ϥʔϝϯશମͰͷ֤τοϐϯάͷ஫จճ਺Λදʹ͢ΔͱҎԼ ͷΑ͏ʹͳΔ

    1 0 0 1 0 2 1 3 3 3 i 種類: 必ず "0" か "1" N-i 種類: 制限なし ▶ Ұ୴ N − i छྨͷ͜ͱ͸๨Εͯɼi छྨʹ͍ͭͯߟ͑Δ ▶ i छྨͷτοϐϯάΛ 1 ഋҎԼʹ৐ͤΔํ๏Λ਺͍͑ͨ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 67/78
  110. Everything on It ▶ ways(i) ͸Ͳ͏ٻΊΔͷʁ (͕͜͜Ұ൪ͷϙΠϯτ) ▶ ஫จͨ͠ϥʔϝϯશମͰͷ֤τοϐϯάͷ஫จճ਺Λදʹ͢ΔͱҎԼ ͷΑ͏ʹͳΔ

    1 0 0 1 0 2 1 3 3 3 i 種類: 必ず "0" か "1" N-i 種類: 制限なし ▶ Ұ୴ N − i छྨͷ͜ͱ͸๨Εͯɼi छྨʹ͍ͭͯߟ͑Δ ▶ i छྨͷτοϐϯάΛ 1 ഋҎԼʹ৐ͤΔํ๏Λ਺͍͑ͨ ▶ ʮಉ͡τοϐϯάͷϥʔϝϯ͸ෳ਺஫จͰ͖ͳ͍ʯͱ͍͏੍໿ʹ஫ҙ ▶ ద౰ʹ΍ΔͱɼԿ΋τοϐϯά͞Ε͍ͯͳ͍΋ͷ͕ෳ਺ొ৔͢Δ ▶ Ͳ͏΍ͬͨΒॏෳͳ͘ߟྀͰ͖Δͷ͔ʁ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 67/78
  111. Everything on It ▶ i छྨͷτοϐϯάΛ৐ͤΔϥʔϝϯͷഋ਺Λ j ͱܾΊଧͪ͢Δ ▶ ͢Δͱɼ࢒Γ

    N − i छྨʹؔͯ͠ {1001}{0100}{0010} 1 杯以下にしか乗せられない i 種類のトッピングを j 杯に配分 (空ラーメンはダメ) N-i 種類を、同じ組み合わせが 出ないように自由に置く N-i 種類を自由に置く tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 68/78
  112. Everything on It ▶ i छྨͷτοϐϯάΛ৐ͤΔϥʔϝϯͷഋ਺Λ j ͱܾΊଧͪ͢Δ ▶ ͢Δͱɼ࢒Γ

    N − i छྨʹؔͯ͠ ▶ ࠷ॳ j ഋʹ͸ɼN − i छྨΛࣗ༝഑ஔ (྘৭ྖҬ) ▶ i छྨͷτοϐϯάͷ഑ஔͷ࣌఺Ͱޓ͍ʹҟͳΔ૊Έ߹ΘͤʹͳΔͨΊɼ ී௨ʹ 2N−i ௨Γͷஔ͖ํ͕ڐ͞ΕΔ {1001}{0100}{0010} 1 杯以下にしか乗せられない i 種類のトッピングを j 杯に配分 (空ラーメンはダメ) N-i 種類を、同じ組み合わせが 出ないように自由に置く N-i 種類を自由に置く tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 68/78
  113. Everything on It ▶ i छྨͷτοϐϯάΛ৐ͤΔϥʔϝϯͷഋ਺Λ j ͱܾΊଧͪ͢Δ ▶ ͢Δͱɼ࢒Γ

    N − i छྨʹؔͯ͠ ▶ ࠷ॳ j ഋʹ͸ɼN − i छྨΛࣗ༝഑ஔ (྘৭ྖҬ) ▶ i छྨͷτοϐϯάͷ഑ஔͷ࣌఺Ͱޓ͍ʹҟͳΔ૊Έ߹ΘͤʹͳΔͨΊɼ ී௨ʹ 2N−i ௨Γͷஔ͖ํ͕ڐ͞ΕΔ ▶ ͦΕҎ߱ʹ͸ɼॏෳ͕ग़ͳ͍Α͏ʹ N − i छྨΛࣗ༝഑ஔ (փ৭ྖҬ) ▶ τοϐϯάͷ૊Έ߹Θͤ͸ 2N−i ௨Γ ▶ ͦΕͷ͏ͪɼͲΕΛ஫จ͢Δ͔΋ࣗ༝ͳͷͰ݁ہ 22N−i ௨Γ ▶ ͜ΕΛ౿·͑ͯɼ࣍ϖʔδͰ঺հ͢ΔΑ͏ͳঢ়ଶΛఆٛ {1001}{0100}{0010} 1 杯以下にしか乗せられない i 種類のトッピングを j 杯に配分 (空ラーメンはダメ) N-i 種類を、同じ組み合わせが 出ないように自由に置く N-i 種類を自由に置く tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 68/78
  114. Everything on It ways(i) ΛٻΊΔͨΊʹඞཁͳࣜ ways2(i, j) := 1 ഋҎԼʹ৐͍ͤͨ

    i छྨͷτοϐϯάΛɼҎԼͷ৚݅Λຬ ͨͯ͠ j ഋʹ৐ͤΔ৔߹ͷ਺ ▶ i छྨͷτοϐϯάͷ͏ͪɼશ͘ొ৔͠ͳ͍΋ͷ͕͋ͬͯ΋ྑ͍ ▶ i छྨͷ֤τοϐϯάʹ͍ͭͯʮ0 ഋʯorʮ1 ഋʯʹ৐͍ͬͯΕ͹Α͍ ▶ j ഋͷ֤ϥʔϝϯʹ͍ͭͯগͳ͘ͱ΋ 1 ͭͷτοϐϯά͕৐͍ͬͯΔ ways(i) ͱ ways2(i) ͷؔ܎ ways(i) = 22N−i i ∑ j=0 2(N−i)jways2(i, j) ▶ ways2(i, j) ͸ಈతܭը๏ʹΑͬͯ O(N2) ͰͰ͖Δ ▶ ͲͷΑ͏ͳભҠʹͳΔ͔ʁ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 69/78
  115. Everything on It ▶ i ൪໨ͷτοϐϯά·ͰΛ j ഋʹ৐ͤͨͱ͢Δ ˠ ways2(i,

    j) ▶ ͜͜ʹɼi + 1 ൪໨ͷτοϐϯάΛ৽ͨʹ௥Ճͯ͠ΈΑ͏ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 70/78
  116. Everything on It ▶ i ൪໨ͷτοϐϯά·ͰΛ j ഋʹ৐ͤͨͱ͢Δ ˠ ways2(i,

    j) ▶ ͜͜ʹɼi + 1 ൪໨ͷτοϐϯάΛ৽ͨʹ௥Ճͯ͠ΈΑ͏ ▶ τοϐϯάΛ৐ͤͳ͍৔߹ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 70/78
  117. Everything on It ▶ i ൪໨ͷτοϐϯά·ͰΛ j ഋʹ৐ͤͨͱ͢Δ ˠ ways2(i,

    j) ▶ ͜͜ʹɼi + 1 ൪໨ͷτοϐϯάΛ৽ͨʹ௥Ճͯ͠ΈΑ͏ ▶ τοϐϯάΛ৐ͤͳ͍৔߹ ▶ ঢ়ଶͱͯ͠ͳʹ΋มΘΒͳ͍ ▶ ways2(i, j) ௨ΓΛͦͷ··࣋ͬͯ͘Ε͹ྑͦ͞͏ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 70/78
  118. Everything on It ▶ i ൪໨ͷτοϐϯά·ͰΛ j ഋʹ৐ͤͨͱ͢Δ ˠ ways2(i,

    j) ▶ ͜͜ʹɼi + 1 ൪໨ͷτοϐϯάΛ৽ͨʹ௥Ճͯ͠ΈΑ͏ ▶ τοϐϯάΛ৐ͤͳ͍৔߹ ▶ ঢ়ଶͱͯ͠ͳʹ΋มΘΒͳ͍ ▶ ways2(i, j) ௨ΓΛͦͷ··࣋ͬͯ͘Ε͹ྑͦ͞͏ ▶ τοϐϯάΛ৐ͤΔ৔߹ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 70/78
  119. Everything on It ▶ i ൪໨ͷτοϐϯά·ͰΛ j ഋʹ৐ͤͨͱ͢Δ ˠ ways2(i,

    j) ▶ ͜͜ʹɼi + 1 ൪໨ͷτοϐϯάΛ৽ͨʹ௥Ճͯ͠ΈΑ͏ ▶ τοϐϯάΛ৐ͤͳ͍৔߹ ▶ ঢ়ଶͱͯ͠ͳʹ΋มΘΒͳ͍ ▶ ways2(i, j) ௨ΓΛͦͷ··࣋ͬͯ͘Ε͹ྑͦ͞͏ ▶ τοϐϯάΛ৐ͤΔ৔߹ ▶ طଘͷ j ഋͷϥʔϝϯͷͲΕ͔ʹ৐ͤΔ͔ɼ৽ͨͳϥʔϝϯʹ৐ͤΔ͔ ▶ j ഋͷϥʔϝϯͷͲΕ͔ʹ৐ͤΔ৔߹ɼϥʔϝϯ͸૿͑ͳ͍ ▶ ৽ͨͳϥʔϝϯʹ৐ͤΔ৔߹ɼϥʔϝϯ͸૿͑Δ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 70/78
  120. Everything on It ▶ i ൪໨ͷτοϐϯά·ͰΛ j ഋʹ৐ͤͨͱ͢Δ ˠ ways2(i,

    j) ▶ ͜͜ʹɼi + 1 ൪໨ͷτοϐϯάΛ৽ͨʹ௥Ճͯ͠ΈΑ͏ ▶ τοϐϯάΛ৐ͤͳ͍৔߹ ▶ ঢ়ଶͱͯ͠ͳʹ΋มΘΒͳ͍ ▶ ways2(i, j) ௨ΓΛͦͷ··࣋ͬͯ͘Ε͹ྑͦ͞͏ ▶ τοϐϯάΛ৐ͤΔ৔߹ ▶ طଘͷ j ഋͷϥʔϝϯͷͲΕ͔ʹ৐ͤΔ͔ɼ৽ͨͳϥʔϝϯʹ৐ͤΔ͔ ▶ j ഋͷϥʔϝϯͷͲΕ͔ʹ৐ͤΔ৔߹ɼϥʔϝϯ͸૿͑ͳ͍ ▶ ৽ͨͳϥʔϝϯʹ৐ͤΔ৔߹ɼϥʔϝϯ͸૿͑Δ ▶ Ҏ্Λ౿·͑ΔͱҎԼͷΑ͏ͳભҠʹͳΔ ▶ ways2(i + 1, j) ʹɼways2(i, j) × (j + 1) Λ഑Δ ▶ ways2(i + 1, j + 1) ʹɼways2(i, j) Λ഑Δ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 70/78
  121. Everything on It ·ͱΊΔͱҎԼͷΑ͏ʹͳΔ ໰୊ͷ౴͑ͱͳΔࣜ Answer = N ∑ i=0

    N Ci(−1)iways(i) ways(i) ΛٻΊΔͨΊʹඞཁͳࣜ ways2(i, j) = ways2(i − 1, j − 1) + ways2(i − 1, j) × (j + 1) ways(i) ͱ ways2(i) ͷؔ܎ ways(i) = 22N−i i ∑ j=0 2(N−i)jways2(i, j) tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 71/78
  122. ࿅श໰୊ ࠓ·Ͱͷ಺༰ֶ͕΂Δ໰୊Λ঺հɽશ෦ղ͍ͯแআʹڧ͘ͳΖ͏ʂʂ ·ͣ͸؆୯Ίͳ΋ͷΛɾɾɾ ▶ yukicoder No. 316: ΋ͬͱܹࢗతͳ FizzBuzz Λ͍ͩ͘͞

    (ೖ໳ ) Link ▶ 3 ͭͷू߹ͰแআݪཧΛମݧ͍ͨ͋͠ͳͨʹ ▶ yukicoder No. 391: CODING WAR (ॳڃ ) Link ▶ Ball and Boxes 3 ͷ੍໿ڧԽ൛Ͱ͢ɽ ▶ yukicoder No. 546: ΦϯϦʔɾϫϯ (ॳڃ ) Link ▶ แআΛద༻͢Δ৔ॴ͕ͪΐͬͱಛघͰ͢ɽ ▶ AtCoder Beginner Contest 003 D: AtCoder ࣾͷౙ (ॳڃ ) Link ▶ ߟ͑ํ͸ॳڃฤͰ΍ͬͨ΋ͷͱಉ༷Ͱ͢ɽࣗྗͰ΍ͬͯΈΑ͏ʂ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 73/78
  123. ࿅श໰୊ ҎԼͷ໰୊͸ɼ೉қ౓తʹ͸தʙ্ڃ͘Β͍ʁ ▶ JOI य़߹॓ 2011: ΧʔυΩʔ Link ▶ AOJ

    2136: Webby Subway Link ▶ Kyoto University Programming Contest 2018 H: Χϥϑϧ਺ྻ Link ▶ yukicoder No.125: ѱͷՖห Link ▶ CSAcademy Round #71: Losing Nim Link ▶ University CodeSprint 5: Cube-loving Numbers Link ▶ CodeChef: Chef and Digits Link ▶ ΢ΫʔχϟͨΜ͓஀ੜ೔ίϯςετ E: Couple Link tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 74/78
  124. ࿅श໰୊ ҎԼ͸͢΂ͯ AtCoder ͷ໰୊Ͱ͢ ▶ AtCoder Regular Contest 102 E:

    Stop. Otherwise... (700) Link ▶ AtCoder Regular Contest 087 F: Squirrel Migration (800) Link ▶ AtCoder Regular Contest 101 E: Ribbons on Tree (900) Link ▶ AtCoder Grand Contest 005 D: ʙK Perm Counting (900) Link ▶ AtCoder Regular Contest 093 F: Dark Horse (1100) Link ▶ AtCoder Grand Contest 013 E: Placing Squares (1600) Link tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 75/78
  125. ࿅श໰୊ ҎԼ͸͢΂ͯ Codeforces ͷ໰୊Ͱ͢ ▶ Round #251 Div.2 E: Devu

    and Birthday Celebration Link ▶ Round #305 Div.1 C: Mike and Foam Link ▶ Round #313 Div.1 C: Gerald and Giant Chess Link ▶ Educational Codeforces Round 20 F: Coprime Subsequences Link ▶ Educational Codeforces Round 52 E: Side Transmutations Link tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 76/78
  126. ࿅श໰୊ ҎԼ͸͢΂ͯ Topcoder ͷ໰୊Ͱ͢ ▶ SRM 305 Div1 Hard: PowerCollector

    Link ▶ SRM 460 Div1 Easy: TheQuestionsAndAnswersDivOne Link ▶ SRM 466 Div1 Hard: DrawingBlackCrosses Link ▶ SRM 498 Div1 Hard: FoxJumping Link ▶ SRM 602 Div2 Hard: BlackBoxDiv2 Link ▶ SRM 603 Div1 Med: PairsOfStrings Link ▶ SRM 613 Div1 Med: RandomGCD Link ▶ SRM 626 Div1 Hard: ReectiveRectangle Link ▶ 2018 TCO Algorithm Round 3B Med: TestProctoring Link tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 77/78
  127. ͍͞͝ʹ ▶ ࣈͷޡΓɾ಺༰ͷޡΓɾͦͷଞޡΓ͋Ε͹ @tsutaj ·Ͱ ▶ ࣭໰౳΋ @tsutaj ·Ͱ͓ئ͍͠·͢ ▶

    ͨ͘͞Μͷํ͕แআݪཧͷ࿅श໰୊Λఏڙͯ͘͠Ε·ͨ͠ɽ͋Γ͕ͱ ͏͍͟͝·͢ʂ ▶ ·ͨɼ࡞੒࣌ʹҎԼͷهࣄΛͱͯ΋ࢀߟʹ͠·ͨ͠ (ॱෆಉ) ▶ ڝٕϓϩάϥϛϯάʹ͓͚Δแআݪཧ໰୊·ͱΊ [hamayan ͞Μ] Link ▶ ϏοτʹΑΔ෦෼ू߹ͷྻڍ [Sigmar ͞Μ] Link ▶ ߴ଎θʔλม׵ / ߴ଎ϝϏ΢εม׵ [naoya_t ͞Μ] Link ▶ AtCoder ൛ʂ ٜຊ (্ڃฤ) [drken ͞Μ] Link ▶ ਺্͑͛ςΫχοΫू [DEGwer ͞Μ] Link - END - tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 78/78