mini notes

競技プログラミングの解法メモを残していきます。

ABC295 D - Three Days Ago

問題:D - Three Days Ago

解答:https://atcoder.jp/contests/abc295/submissions/40056127

解法:l, r間で各数字が偶数個出ていればOK。数字の個数を累積和で管理すると、l, rで各数字の個数の偶奇がそろっていればよい。

とすると、各数字の個数は偶奇の情報を持てばよく、さらにそれをビットの情報としてとらえれば、0~1023(2047?)以下の1つの整数に置き換えることができる。

あとは同じ数字ごとに個数をカウントしてゆき、l, rの組み合わせとしてどのように取り出せるかを考えらればよい。これは、個数カウントをnとするとnC2となる。ただし、l=1のケースは数字が0の場合に該当するため、数字が0の時のカウントをさらに足してあげる必要がある。