(ू߹ 1 ݸͷ͠Ҿ͖) ʹ͓͍ͯ m ճ͞ΕΔ ▶ ӈลͷୈೋ߲ (ू߹ 2 ݸͷ͠Ҿ͖) ʹ͓͍ͯ m C2 ճҾ͔ΕΔ ▶ ... k ͕حͷ߹ɼӈลͷୈ k ߲ʹ͓͍ͯ m Ck ճ͞ΕΔ ▶ ... k ͕ۮͷ߹ɼӈลͷୈ k ߲ʹ͓͍ͯ m Ck ճҾ͔ΕΔ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 6/78
(ू߹ 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
ͱ 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
ʹͳΔՄೳੑͷ͋ΔॴͲ͏͑Δͷʁ ▶ i ൪ͷΠϯσοΫε͕ۭ͍͓ͯΓɼ͔ͭ݀Ͱͳ͍ཁૉͱͯࣗ͠વ i ͕ΘΕ͍ͯͳ͚Εɼai = i ʹͳΔՄೳੑ͕͋Δ ▶ ai = i ʹͳΔཁૉͷݸΛ k ݸͱܾΊଧͪͨ͠ޙɼͲ͏ͤΑ ͍ͷʁ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 25/78
ʹͳΔՄೳੑͷ͋ΔॴͲ͏͑Δͷʁ ▶ 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
▶ ·ͣɼ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
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
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
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
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
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
ʮগͳ͘ͱ 1 ͭͷཁૉ bi ʹ͍ͭͯ bi < ai ʯ ▶ bi < ai ͱͳΔཁૉͷݸΛܾΊଧͪ (j ݸ) ▶ Γ N − j ݸʹؔͯ͠Ͳ͏Ͱྑ͘ͳΔ ▶ ରশੑΓཱͨͳͦ͞͏ͩ͠ɼN ≤ 30 ͳͷͰ۪ʹΔͱ TLE ▶ ಈతܭը๏Λ༻͍ͯঢ়ଶΛ·ͱΊΔ͜ͱΛߟ͑Α͏ʂʂ ▶ ݟΔ͖ঢ়ଶͷύϥϝʔλΛ୯७ʹ͠ɼ·ͱΊΒΕΔͷ·ͱΊΔ tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 44/78
ͷྻશମ͕ɼ͋Δ͞ 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
A ͱ B ͷ࠷খपظ͍͠ (d ͱ͓͘) ▶ A ճసૢ࡞Λ d ճ͢ΔͱݩʹΔ͜ͱ͔ΒɼA ʹରͯ͠ճసૢ࡞Λ 1, 2, . . . , d − 1 ճߦ͏͜ͱͰಘΒΕΔྻͷ͍ͣΕ͔ 1 ͭͷΈ͕ B ͱ Ұக tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 62/78
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
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
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
d − t ճૢ࡞ͨ͠ྻ) ▶ A ʹରͯ͠ճసૢ࡞Λ 1, 2, . . . , d − 1 ճߦ͏͜ͱͰಘΒΕΔྻͷ͍ ͣΕ͔ 1 ͭͷΈ͕ B ͱҰக͢Δ͜ͱ͔Βɼt = d − t ▶ มܗͯ͠ɼt = d 2 tsutaj (Hokkaido Univ.) แআݪཧ October 16, 2018 63/78
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
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