#ATagc061e. [AGC061E] Increment or XOR

[AGC061E] Increment or XOR

题目描述

有一个非负整数 XX,初始值为 SS。你可以以任意顺序、任意次数执行以下操作:

  • XX11。该操作的代价为 AA
  • 选择一个 11NN 之间的 ii,将 XX 替换为 XYiX \oplus Y_i。该操作的代价为 CiC_i。这里,\oplus 表示按位异或运算。

请你求出将 XX 变为给定非负整数 TT 所需的最小总代价,或者报告无法达成目标。

按位异或运算的定义如下:
对于非负整数 A,BA, BABA \oplus B 的二进制表示中,第 2k2^k 位(k0k \geq 0)的数,如果 AABB 的该位只有一个为 11,则结果为 11,否则为 00

例如,35=63 \oplus 5 = 6(二进制为:011101=110011 \oplus 101 = 110)。
一般地,kk 个非负整数 p1,p2,p3,,pkp_1, p_2, p_3, \dots, p_k 的按位异或为 $(\dots((p\_1 \oplus p\_2) \oplus p\_3) \oplus \dots \oplus p\_k)$,并且可以证明,这个结果与顺序无关。

输入格式

输入从标准输入读入,格式如下:

NN SS TT AA
Y1Y_1 C1C_1
\vdots
YNY_N CNC_N

输出格式

如果无法达成目标,输出 -1。否则,输出所需的最小总代价。

样例 1

输入

1 15 0 1
8 2

输出

5

样例 2

输入

3 21 10 100
30 1
12 1
13 1

输出

3

样例 3

输入

1 2 0 1
1 1

输出

-1

样例 4

输入

8 352217 670575 84912
239445 2866
537211 16
21812 6904
50574 8842
380870 5047
475646 8924
188204 2273
429397 4854

输出

563645

说明/提示

限制条件

  • 1N81 \leq N \leq 8
  • 0S,T<2400 \leq S, T < 2^{40}
  • 0A1050 \leq A \leq 10^5
  • 0Yi<2400 \leq Y_i < 2^{40}1iN1 \leq i \leq N
  • 0Ci10160 \leq C_i \leq 10^{16}1iN1 \leq i \leq N
  • 输入中的所有值均为整数。

样例解释 1

可以通过以下方式将 XX 变为 TT

  • 选择 i=1i=1,将 XX 替换为 X8X \oplus 8,此时 X=7X=7,代价为 22
  • XX11,此时 X=8X=8,代价为 11
  • 选择 i=1i=1,将 XX 替换为 X8X \oplus 8,此时 X=0X=0,代价为 22

由 ChatGPT 4.1 翻译