2023年4月11日火曜日

Codeforces Round 865 (Div. 1)

 AB二完。

コンテスト後のツイート

C. Between

 具体例を考えたとき、色々間違えていた。
 n=3で、

2 1 3 2 2 3

 なら、2を二個にしたら3は一個にしなきゃいけないものと勘違い。これ、3は(二個どころか)三個おいても大丈夫だった。

・3 2 1 3 2 3

 で良い。

 n=3で、

2 1
3 1 3 2 2 3

 でも、

・2 3 1 2 3

 が最善。(2, 3の順番に注意。1の左右で同じ順番でなくてはならない。私は、左右で逆の順番にした方が良いと勘違いしていた)

 つまり、1からの距離だけ見ればOK。
 それさえ分かれば、1からの距離が偶数のものは、index 0, 2, 4, ...に割り振り、奇数のものはindex 1, 3, 5, ...に割り振る感じで構築できる。

D. XOR Counting

 解説AC。

 N=2以外のときは自明で、n=2のときは桁DPでできる、というような解法ツイートを読んだ。
 桁DPと言われてもぱっとは理解できなかったのだが、下の桁が1のときと0のときで場合分けを書いて見ると、桁で場合分けすれば再帰で計算できることは分かった。
 一番下の桁が0のとき、0,0と、1,1の二つに分かれるが、それらでは一つ上の桁が1変わってくる。なので、その二つで値がかぶることはないことから、場合分けして考えられる。

 ただ、その後の高速化ができず解説を見た。

 一気に再帰で計算しようとするのではなく、

・一番下の桁が1のとき、その桁に関するxorは1になるが、その値がどんな数字にかかってくるのか、個数を求める

 ものを再帰で書けば良かった。

0 件のコメント:

コメントを投稿