JOI 2013 春合宿 day4-1 messenger 解説

65bd3434deeeb8afc00485cdfc3e260a?s=47 snuke
March 23, 2013

JOI 2013 春合宿 day4-1 messenger 解説

情報オリンピック2013春合宿4日目1問目messengerの解説

65bd3434deeeb8afc00485cdfc3e260a?s=128

snuke

March 23, 2013
Tweet

Transcript

  1. ୈ12ճ ೔ຊ৘ใΦϦϯϐοΫय़߹॓ day4 Messenger ೋ֊ಊ ݐਓ (@the_nikaidoes/snuke)

  2. ໰୊֓ཁ A͞Μʹ͋Δ਺ X ͕఻͑ΒΕΔɻ(1≤X≤10^9) A͞ΜͱB͞Μ͸̐×̐ͷϚε໨ͱ͕ۨ͋Δ෦԰ʹ ϥϯμϜͳॱ൪Ͱݺͼग़͞ΕΔɻ ۨΛಈ͔͢͜ͱͷΈʹΑͬͯA͞Μ͸B͞Μʹ X ͷ஋Λ఻͍͑ͨɻ

  3. A B Kཧࣄ௕ͷ෦԰

  4. X ͷ৘ใྔ͸̍౓ʹ఻͑Δʹ͸େ͖͗͢Δɻ X ͷ৘ใΛ࠷খ୯Ґ·Ͱ۠੾Δɻ ʮ৘ใΛ࠷খ୯Ґʯʹʮyes/noʯʹ 1bit ͭ·ΓɺXΛ̎ਐ਺ʹܻͯ̍ͣͭ͠఻͑Δɻ جຊతͳํ਑

  5. 1bitΛ఻͑Δʹ͸Ͳ͏͢Ε͹ྑ͍͔ʁ 0,1ʹରԠ͢Δૢ࡞ΛܾΊ͓͖ͯɺA͕ͦͷૢ࡞ Λ࣮ߦͯ͠ɺB͕ͦͷૢ࡞͔Β1bitͷ৘ใΛಡΈ औΔɻ جຊతͳํ਑

  6. A͞ΜͱB͞Μ͕ABABABABA...ͷॱͰަޓʹݺ ͼग़͞ΕΔɻ subtask1 (20pts)

  7. 0,1ʹରԠ͢Δૢ࡞ͷׂΓ౰ͯͷྫ ʮ0ͳΒॎɺ1ͳΒԣʹҠಈͤ͞Δɻʯ subtask1 (20pts)

  8. A 101 B ??? Kཧࣄ௕ͷ෦԰

  9. A 10- B ??? Kཧࣄ௕ͷ෦԰ A͕1Λ఻͑ΔͨΊʹɺۨΛԣʹಈ͔ͨ͠

  10. A 10- B ??1 Kཧࣄ௕ͷ෦԰ B͕1ΛಡΈऔΓɺۨΛద౰ʹҠಈͤͨ͞

  11. A 1-- B ??1 Kཧࣄ௕ͷ෦԰ A͕0Λ఻͑ΔͨΊʹɺۨΛॎʹಈ͔ͨ͠

  12. A 1-- B ?01 Kཧࣄ௕ͷ෦԰ B͕0ΛಡΈऔΓɺۨΛద౰ʹҠಈͤͨ͞

  13. A --- B ?01 Kཧࣄ௕ͷ෦԰ A͕1Λ఻͑ΔͨΊʹɺۨΛԣʹಈ͔ͨ͠

  14. A --- B 101 Kཧࣄ௕ͷ෦԰ B͕1ΛಡΈऔΓɺۨΛద౰ʹҠಈͤͨ͞

  15. 2^29 ≤ 10^9 ≤ 2^30 ͳͷͰɺ30ճͷ΍Γऔ ΓΛ͢Ε͹ X ͷ஋Λ఻͑Δ͜ͱ͕ग़དྷΔɻ A͕ॎԣͲͪΒʹಈ͔ͨ͠ͷ͔͸ɺB͕ಈ͔ͨ͠ޙ

    ͷۨͷҐஔΛهԱ͓͚ͯ͠͹ྑ͍ɻ ͨͩ̍͠λʔϯ໨͸ɺA͕Ͳ͏ಈ͔ͨ͠ͷ͔͕Bʹ ͸෼͔Βͳ͍ͷͰɺࣺͯΔɻ subtask1 (20pts)
  16. جຊతͳํ਑ͦͷ̎ ͜ΕҎ߱ͷsubtaskͰ͸ɺAͱB͕ަޓʹݺͼग़͞ ΕΔͱ͸ݶΒͳ͍ɻ AAABAABBBBBBABAAA...Έ͍ͨͳͷ΋͋Γ͏Δ ʮࢭ·ͬͨ··ʯ͕ՄೳͳΒಉ͡ͳͷ͕ͩɾɾɾ

  17. A B Kཧࣄ௕ͷ෦԰ B͕ۨΛ(2,3)ʹಈ͔ͨ͠

  18. A B Kཧࣄ௕ͷ෦԰ A͕ۨΛ(2,2)ʹಈ͔ͨ͠

  19. A B Kཧࣄ௕ͷ෦԰ A͕ۨΛ(2,3)ʹಈ͔ͨ͠

  20. A B Kཧࣄ௕ͷ෦԰ B͸͕ۨ(2,3)ʹ͋Δ͜ͱΛ஌Β͞ΕΔ

  21. جຊతͳํ਑ͦͷ̎ ͜ͷΑ͏ͳૢ࡞Λͯ͠͠·ͬͨ৔߹ɺBAABͱݺͼ ग़͞Εͨ࣌ͱɺBBͱݺͼग़͞Εͨ࣌ͷ۠ผ͕͔ͭ ͳ͍ɻ ૬ख͕ಈ͔ͨ͠৔ॴʹಈ͔͢ૢ࡞Λ͢ΔͱҋΔɻ ͭ·Γ

  22. A B Kཧࣄ௕ͷ෦԰ B͕ۨΛ(2,3)ʹಈ͔ͨ͠

  23. A B Kཧࣄ௕ͷ෦԰ A͕ۨΛ(2,2)ʹಈ͔ͨ͠

  24. A B Kཧࣄ௕ͷ෦԰ A͸(2,3)Ҏ֎ʹۨΛಈ͔͢

  25. جຊతͳํ਑ͦͷ̎ ࿈ଓͰݺ͹ΕΔͱʮ0ͳΒॎɺ1ͳΒԣʹҠಈͤ͞ Δɻʯͱ͍͏ํ਑ʹࢧো͕ग़Δ͔ʁ # ࣮͸ͦΜͳʹग़ͳ͍ɻ

  26. 0(ॎ)Λ఻͑Δ৔߹ͷྫ ্͕ۨ୺ɾԼ୺ʹ͋Δ৔߹ Kཧࣄ௕ͷ෦԰ Kཧࣄ௕ͷ෦԰ ͜ ͜ ͜ ͜ ͕ۨதԝͷஈʹ͋Δ৔߹ 1(ԣ)Λ఻͑Δ৔߹΋ಉ༷

    ʮ͜͜ʯΛ͏Ζ͏Ζ͍ͯ͠Ε͹͍͍ɻ
  27. جຊతͳํ਑ͦͷ̏ A͞ΜͱB͞ΜͷͲͪΒ͕࠷ॳʹݺͼग़͞ΕΔ͔͕ ෼͔Βͳ͍ɻ subtask1Ͱ͸ʮ̍λʔϯ໨͸ࣺͯΔʯͱ͍͏ઓུ ΛऔΔ͜ͱ͕Ͱ͖͕ͨɺࠓ౓͸͏·͍͔͘ͳ͍ɻ

  28. جຊతͳํ਑ͦͷ̏ ABABAB... BABABA... ྘Ͱࣔͨ͠ͱ͜Ζ͸஋ͷ఻ୡΛ͍ͯ͠Δ෦෼ʹͳΔ ͸͕ͣͩɺԼͷύλʔϯͩͱB͔Β࢝·͓ͬͯΓɺ ఻ୡ͕͏·͍͔͘ͳ͍ɻ ͲͪΒ͔Β࢝·ͬͨͷ͔Λ͏·͘఻͍͑ͨɻ

  29. ॳظঢ়ଶͰ͸ඞͣۨ͸(1,1)ʹ͋Δɻ subtask2 (20pts)

  30. (1,1)ʹۨΛಈ͔͢͜ͱΛېࢭ͢Δɻ ͢Δͱ֤ϓϨΠϠʔ͸ɺࣗ෼͕࠷ॳʹݺ͹Εͨͷ ͔Ͳ͏͔Λ൑ผ͢Δ͜ͱ͕ՄೳʹͳΔɻ -(1,1)ʹ͋Δ৔߹ɿࣗ෼͕࠷ॳʹݺ͹Εͨ -(1,1)ʹͳ͍৔߹ɿࣗ෼͸࠷ॳʹݺ͹Ε͍ͯͳ͍ subtask2 (20pts)

  31. A 10 B ?? Kཧࣄ௕ͷ෦԰ A͔Βݺͼग़͢৔߹

  32. A 10 B ?? Kཧࣄ௕ͷ෦԰ (1,1)ʹ͕ۨ͋ͬͨͷͰɺA͸ࣗ෼͕࠷ॳʹݺ͹Εͨ͜ͱ͕෼͔Δ A͸ۨΛద౰ʹಈ͔ͨ͠

  33. A 10 B ?? Kཧࣄ௕ͷ෦԰ A͸(1,1)Ҏ֎ͷϚεʹۨΛಈ͔ͨ͠

  34. A 10 B ?? Kཧࣄ௕ͷ෦԰ (1,1)ʹ͕ۨͳ͔ͬͨͷͰɺB͸A͕࠷ॳʹݺ͹Εͨ͜ͱ͕෼͔Δ B͸ۨΛద౰ʹಈ͔ͨ͠

  35. A 10 B ?? Kཧࣄ௕ͷ෦԰ B͸(2,2)Ҏ֎ͷϚεʹۨΛಈ͔ͨ͠

  36. A 1- B ?? Kཧࣄ௕ͷ෦԰ A͕0Λ఻͑ΔͨΊʹɺۨΛॎʹಈ͔ͨ͠

  37. A 1- B ?0 Kཧࣄ௕ͷ෦԰ B͕0ΛಡΈऔΓɺۨΛద౰ʹҠಈͤͨ͞

  38. A -- B ?0 Kཧࣄ௕ͷ෦԰ A͕1Λ఻͑ΔͨΊʹɺۨΛԣʹಈ͔ͨ͠

  39. A -- B ?0 Kཧࣄ௕ͷ෦԰ A͕1Λ఻͑ΔͨΊʹɺۨΛԣʹಈ͔ͨ͠

  40. A -- B 10 Kཧࣄ௕ͷ෦԰ B͕1ΛಡΈऔΓɺۨΛద౰ʹҠಈͤͨ͞

  41. A 10 B ?? Kཧࣄ௕ͷ෦԰ B͔Βݺͼग़͢৔߹

  42. A 10 B ?? Kཧࣄ௕ͷ෦԰ (1,1)ʹ͕ۨ͋ͬͨͷͰɺB͸ࣗ෼͕࠷ॳʹݺ͹Εͨ͜ͱ͕෼͔Δ B͸ۨΛద౰ʹಈ͔ͨ͠

  43. A 1- B ?? Kཧࣄ௕ͷ෦԰ (1,1)ʹ͕ۨͳ͔ͬͨͷͰɺA͸B͕࠷ॳʹݺ͹Εͨ͜ͱ͕෼͔Δ A͕0Λ఻͑ΔͨΊʹɺۨΛॎʹಈ͔ͨ͠

  44. A 1- B ?0 Kཧࣄ௕ͷ෦԰ B͕0ΛಡΈऔΓɺۨΛద౰ʹҠಈͤͨ͞ ҎԼಉ༷

  45. ։࢝৔ॴ͢Β෼͔Βͳ͍ɻ subtask3 (60pts)

  46. ͳΒ͹ແཧ໼ཧʮ։࢝ҐஔʯΛ࡞ͬͯ΍Ζ͏ʂ ֤ϓϨΠϠʔͷ࠷ॳ5λʔϯ(࿈ଓͯ͠ݺͼग़͞ΕΔͷΛ1λ ʔϯͱ਺͑Δ͜ͱʹ͠·͢)͘Β͍͸ͳ͔ͬͨ͜ͱʹ͠ɺ ͻͨ͢Β(1,1)ʹ޲͔ͬͯҠಈ͢Δɻ subtask3 (60pts)

  47. ͦͷޙ͸subtask2ͱશ͘ಉ͡ɻ ABABABABABABAB... BABABABABABABA... AAABBBABAAABABBABBABABBB... ੨͍෦෼͸ͳ͔ͬͨ͜ͱʹ͞ΕΔ෦෼ɻ ͳ͔ͬͨ͜ͱʹ͞ΕΔ෦෼͸ඞͣ࿈ଓతɻ subtask3 (60pts)

  48. subtask3 (60pts) ͳ͔ͬͨ͜ͱʹ͢Δλʔϯ͕ऴΘͬͨޙʹ(1,1) ʹࢭ·͍ͬͯͳ͍͜ͱ΋͋Δɻ ʮ(1,1)ʯΛʮ̍ߦ໨ʯʹ͢Δͱ͏·͍͘͘ɻ

  49. A 0 B ? Kཧࣄ௕ͷ෦԰ ̑λʔϯͣͭ͘Β͍ͳ͔ͬͨ͜ͱʹͯ͠ɺ ʮॳظҐஔʯ͸(2,1)ͱͳͬͨɻ

  50. A 0 B ? Kཧࣄ௕ͷ෦԰ ̍ߦ໨ʹ͕ۨ͋ͬͨͷͰɺA͸ࣗ෼͕࠷ॳʹݺ͹Εͨ͜ͱ͕෼͔Δ A͸ۨΛద౰ʹಈ͔ͨ͠

  51. A 10 B ?? Kཧࣄ௕ͷ෦԰ A͸1ߦ໨Ҏ֎ͷϚεʹۨΛಈ͔ͨ͠ ΠΧུ

  52. ؔ਺ݺͼग़͠ͷ߹ܭΛ3301ճʹ཈͑ΒΕ·͢ɻ 400ճͰॳظॲཧɺ2900ճͰ஋ͷ఻ୡɺ1ճͰ஋Λ౴͑Δ subtask4 (͓·͚)

  53. ஋఻ୡphase A͸̍ճʹ2bit(0~3)Λ఻͑Δɻ B͸ۨΛඞͣਅΜதͷ̐ͭͷ͍ͣΕ͔ʹಈ͔͢ɻ subtask4 (͓·͚)

  54. Kཧࣄ௕ͷ෦԰ 00 10 01 11 ఻͍͑ͨ2bitʹରԠ͢Δ৔ॴΛ͏Ζ͏Ζ͢Δɻ

  55. ॳظॲཧphase Aͷ̍λʔϯ໨ɿ۱Ҏ֎ͷϚεʹҠಈ Aͷ̎λʔϯ໨Ҏ߱ɿ B͕ʮmove1ʯΛͨ͠ͱ͖ɿ۱Ҏ֎ͷϚεʹҠಈ B͕ʮmove2ʯΛͨ͠ͱ͖ɿ஋఻ୡphaseʹҠߦ subtask4 (͓·͚)

  56. ॳظॲཧphase Bͷ̍λʔϯ໨ɿmove1 Bͷ̎λʔϯ໨ɿmove2 move2ͷ௚ޙ͸ඞͣਅΜதͷ̐ͭͷ͍ͣΕ͔ͷϚ εʹ͕ۨ͋ΔΑ͏ʹ͢Δ subtask4 (͓·͚)

  57. Kཧࣄ௕ͷ෦԰ move1 move2 ͕ۨதԝʹ͋Δ࣌ͷmove1ͱmove2ͷྫ

  58. Kཧࣄ௕ͷ෦԰ move1 move2 ͕ۨลʹ͋Δ࣌ͷmove1ͱmove2ͷྫ

  59. A ۱Ҏ֎ʹ B move1 A͔Βελʔτ B͔Βελʔτ A ۱Ҏ֎ʹ B move2

    A ஋఻ୡ΁ B move1 A ۱Ҏ֎ʹ B move2 A ஋఻ୡ΁
  60. A ۱Ҏ֎ʹ A͔Βελʔτ B͔Βελʔτ B move1 A ۱Ҏ֎ʹ B move2

    A ஋఻ୡ΁
  61. ౷ܭ 0 2.143 4.286 6.429 8.571 10.714 12.857 15 0

    10 20 30 40 50 60 70 80 90 100
  62. ༮ঁ໰୊ ༮ঁ23ਓ͕ͱ͋Δ༸ؗʹด͡ࠐΊΒΕͨ ༮ঁ͸޿ؒʹूΊΒΕࠓޙʹ͍ͭͯ࿩͠߹͏͜ͱ͕Ͱ͖Δ͕Ŋ࿩͠߹͍͕͢ΜͩΒɺ Ұਓͣͭผʑͷ23ࣨͷ෦԰ʹ༓ด͞Εͯ௚઀ͷίϛϡχέʔγϣϯ͸औΓ߹͑ͳ͍ɻ ͦͷޙ23ਓͷத͔ΒŽƃŦƄŷʹ1ਓ͕બ͹ΕΔŇ୭͕͍ͭબ͹Ε͔ͨΛଞͷ༮ঁ͸஌Δ͜ͱ ͕Ͱ͖ͳ͍ɻ બ͹Εͨ༮ঁ͸ผʹ༻ҙ͞Εͨੴ૾ͷ෦԰ͰҎԼͷ2ͭͷ͏ͪͷͲͪΒ͔ΛඞͣߦΘͳ ͚Ε͹ͳΒͳ͍ 1.෦԰ͷதԝͷੴ૾ͷ޲͖Λ90౓ӈ͔ࠨʹճసͤ͞Δ(ੴ૾͸౦੢ೆ๺ͷ͍ͣΕ͔Λ޲͍ ͍ͯΔ)

    2.෦԰ͷதԝͷੴ૾Λഁյ͢Δ ༮ঁ͕1Λߦͬͨ৔߹Ŋ༮ঁ͸෦԰ʹ໭͞Ε࣍ʹŽƃŦƄŷʹબ͹Εͨ༮ঁ͕ಉ༷ͷૢ࡞Λ͢ Δ(ҎԼ܁Γฦ͠) ༮ঁ͕2Λߦͬͨ৔߹ŊͦΕ·Ͱʹੴ૾ͷ෦԰Ͱ1Λߦͬͨ༮ঁ͕શһղ์͞ΕΔ ͨͩ͠Ŋੴ૾ͷ࠷ॳͷ޲͖͸ෆ໌ͱ͢Δɻ·ͨɺͲͷ༮ঁ΋े෼ͳ࣌ؒΛ଴ͯ͹ඞͣબ ͹ΕΔ΋ͷͱ͢Δɻ ͯ͞ɺ͜ͷͱ͖༮ঁୡͷશһ͕࣮֬ʹ༸͔ؗΒղ์͞ΕΔʹ͸ ࣄલͷ࿩͠߹͍ͰͲͷΑ͏ͳऔΓܾΊΛ͢Ε͹͍͍͔