horoyoisawaのゴミ箱

いろいろ書きます

AtCoder Beginner Contest 150 E - Change a Little Bit(考察途中)

問題文は以下のリンクから。

atcoder.jp

 

(((((考察アホほど違ってた))))))))))

AtCoder Beginner Contest151 のE問題 Max-Min Sumsとだいぶ似ている問題。

この問題についてもCはソートしておいて大丈夫。

 C_iが何回足されるかに注目する。

C_kに着目する。C_kより大きいコストを持つビットについては考察にいれなくて良い。(それらのビットが異なっていようと、同じであろうとどちらでも良い)。今考えているのはコストの和の最小値である。自分よりコストが大きいビットに関しては先に処理する。C_kが操作されずに残っている時、他に残っているのはC_kよりコストが小さいビットのみである。

よってC_kよりコストが大きいビットに関して、ST間で「同じ」か「異なる」か2通りありビット数はn-k個あるので 2 ^ {n - k - 1}通り考えられる。

問題になるのは、C_kよりコストが小さいビットに関してである。そのビットの数はk-1個あるわけだが、そのビットに関してST間で「同じ」か「異なる」かを考える。j個異なると考えると、k-1個の中からj個を選ぶ組み合わせが{ }_{k-1} C _j通りである。そして、前に残っているj個より先にC_kを操作する必要があり、そのコストは(j+1) \times C_kである。それを考慮すると以下の和を求める必要が出てくる。

 {}_{k-1} C _0 + 2 \times {}_{k-1} C _1 + ... + k \times {}_{k-1} C _{k-1}

これに先ほどの 2 ^ {n - k - 1}をかける。これを0~N-1で和をとってやればおk。

だが問題の上の和をどのようにして求めるかがなかなか謎だ。

どうすれば良いのかわかったら追記する。

追記