题目描述
非負整数 X があり、はじめその値は S です。以下の操作を任意の順に何度でも行うことができます。
- X に 1 を足す。この操作のコストは A である。
- 1 以上 N 以下の i を選び、X を X ⊕ Yi に置き換える。この操作のコストは Ci である。ここで、⊕ はビット単位 XOR 演算を表す。
与えられた非負整数 T に X を等しくするのに必要な最小の合計コストを求めるか、それが不可能であることを報告してください。
ビット単位 XOR 演算とは 非負整数 A, B のビット単位 XOR、A ⊕ B は、以下のように定義されます。
- A ⊕ B を二進表記した際の 2k (k ≥ 0) の位の数は、A, B を二進表記した際の 2k の位の数のうち一方のみが 1 であれば 1、そうでなければ 0 である。
例えば、3 ⊕ 5 = 6 となります(二進表記すると: 011 ⊕ 101 = 110)。
一般に、k 個の非負整数 p1, p2, p3, …, pk のビット単位 XOR は $ (\dots\ ((p_1\ \oplus\ p_2)\ \oplus\ p_3)\ \oplus\ \dots\ \oplus\ p_k) $ と定義され、これは p1, p2, p3, …, pk の順番によらないことが証明できます。
输入格式
入力は、標準入力から以下の形式で与えられる。
N S T A Y1 C1 ⋮ YN CN
输出格式
課題が達成不可能なら、-1
を出力せよ。 そうでないなら、必要な最小の合計コストを出力せよ。
题目大意
你有一个非负整数 X 初始为 S。给定 N 和数列 Y1,Y2,…YN 以及 C1,C2,…,CN。你可以进行下列操作任意多次:
- 令 X←X+1,花费 A 的代价;
- 令 X←XxorYi,花费 Ci 的代价。
你想要把 S 变成 T,求最小代价。
$1\le N\le 8,0\le S,T,Y_i<2^{40},0\le A\le 10^5,0\le C_i\le 10^{16}.$
1 15 0 1
8 2
5
3 21 10 100
30 1
12 1
13 1
3
1 2 0 1
1 1
-1
8 352217 670575 84912
239445 2866
537211 16
21812 6904
50574 8842
380870 5047
475646 8924
188204 2273
429397 4854
563645
提示
制約
- 1 ≤ N ≤ 8
- 0 ≤ S, T < 240
- 0 ≤ A ≤ 105
- 0 ≤ Yi < 240 (1 ≤ i ≤ N)
- 0 ≤ Ci ≤ 1016 (1 ≤ i ≤ N)
- 入力中の値は全て整数である。
Sample Explanation 1
以下の方法で X を T と等しくすることができます。 - i=1 を選んで X を X ⊕ 8 に置き換え、X=7 とする。この操作のコストは 2 である。 - X に 1 を足し、X=8 とする。この操作のコストは 1 である。 - i=1 を選んで X を X ⊕ 8 に置き換え、X=0 とする。この操作のコストは 2 である。