atcoder#ARC152E. [ARC152E] Xor Annihilation
[ARC152E] Xor Annihilation
题目描述
数直線上の の位置に 個のボールが並んでおり、 にあるボールは の重みを持っています。ただし、 は から までの整数を並び替えた数列です。 さらに、あなたは 以下の負でない整数 を つ選び、座標 にそれぞれ の重みを固定します。 その後、各ボールは次の規則にしたがって、一斉に運動を始めます。
- 各時点で、ボールの存在している座標より真に右側にある座標・ボールの重みの総 を 、真に左側にある座標・ボールの重みの総 を とすると、このボールは であれば右側に、 であれば左側に毎秒 の速さで動き、 であれば静止する。
- 左右から来たボールが同じ座標に到達したときなど、同じ座標に同時に複数のボールが存在した場合、これらのボールは合体し、その重みは合体前の重みの総 となる。
このとき、 秒以内に全てのボールが静止するような はいくつあるでしょうか。
とは 非負整数 のビット単位 、 は、以下のように定義されます。
- を二進表記した際の () の位の数は、 を二進表記した際の の位の数のうち一方のみが であれば 、そうでなければ である。
例えば、 となります (二進表記すると: )。
一般に 個の非負整数 のビット単位 は $ (\dots\ ((p_1\ \oplus\ p_2)\ \oplus\ p_3)\ \oplus\ \dots\ \oplus\ p_k) $ と定義され、これは の順番によらないことが証明できます。
输入格式
入力は以下の形式で標準入力から与えられる。
输出格式
答えを整数で出力せよ。
题目大意
一条直线上有 个初始坐标分别为 的动点。其中坐标为 的点有一个权值 。
现在你要在 和 坐标处各加一个不超过 非负权值 ,然后 个点会按照下列规则同时从初始坐标开始移动:
-
每个单位时间内,记严格小于一个点的坐标的权值异或和为 ,严格大于这个点的权值异或和为 。当 时,这个点会以 个单位长度每个单位时间的速度向右移动; 时则会以同样速度向左移动; 时,这个点会静止不动。
-
当两个点在同一时间到达同一坐标时,这两个点会合并成一个点,新点的权值为两个点权值的异或和。
请求出可以使所有点在 个单位时间内静止下来的 的个数。
(注: 和 处只是增加了 的权值,初始时并没有动点。)
保证 , 且 时 ,输入的所有数均为整数。
2
1 2 3
1
3
7 1 2 3 4 5 6
2
提示
制約
- のとき
- 入力される値はすべて整数である
Sample Explanation 1
の重みを持つボールを単に と呼びます。 例えば とした場合、はじめ と は右向きに、 は左向きに動きます。 すると と がぶつかって合体し、この瞬間から左向きに動き始めます。 そののち、 から まで全てのボールが合体した瞬間に合体後のボールは静止します。 したがって、 は条件を満たします。 また、 とした場合、 と は左向き、 は右向きに、固定した重みに向かって 秒程度動き続けることになります。 したがって、 は条件を満たしません。 実は のみが条件を満たすため、 と答えてください。