AtCoder Beginner Contest 295 備忘録
コンテストページ: AtCoder Beginner Contest 295 - AtCoder
コンテスト中AC: A〜D
D - Three Days Ago
便宜上、が空文字として存在するものとします。なお、以下に示す解法で「文字」と表現したときには空文字は無視し、0,1,2,3,4,5,6,7,8,9を指すものとします。
問題文のが満たすべき条件を以下のように言い換えられます。
- の文字目から文字目までについて、すべての文字の個数が偶数である
更に以下のように言い換えられます。
- の「文字目から文字目」と、「文字目から文字目」について、全ての文字の個数の偶奇が等しい
ここで、10桁の2進数を定めます。
は、の文字目から文字目までに文字が偶数個含まれているなら、ビット目が0、奇数個なら1とします。
このようにすると、の条件は更に言い換えられます。
そこで、について、を計算し、その個数をカウントします。ここから選ばれる2つのインデックスの組は、問題文の条件を満たします。
よって、となるインデックスの個数を個とすれば、個が条件を満たします。従って、の全てについてその総和をとれば、答えとなります。
ここで、はのビット目のビットを反転させることでで計算可能です。
の記録にハッシュマップを使えば、で計算可能です(もしくは、の方が大きくなります)。