CF2077F AND x OR
CF2077F AND x OR
题目简述
- 由一个数组 \(a\),一个数组 \(b\). 我们通过一些操作使得 \(a\) 变成 \(b\) 的最小代价
- \(a_i:=a_i+1\),\(b_i:=b_i+1\) 这两种操作代价为 \(1\)
- 再做完前两种操作后,可以免费执行若干次 \(a_i:=a_i\& x,a_j:=a_j|x(i\not= j)\)
- 求最小代价
题解
-
注意到我们可以牺牲一个位置,使得所有其他位置得到还原。
-
所以啊我们只需要考虑如何借助别的元素还原牺牲的那个位置。
-
设牺牲位值为 \(x\),若存在 \(x=y\) 显然可以还原。
-
其实差一点,还是没能注意到这点,其实若是 \(x,y\) 是包含关系也是可以的。
-
我们可以先同时构造大的,然后小得取交,大的取并即可
-
好耶,到这里已经分析的差不多了,就是每次给 \(b_i\) 加 \(1\) 直到出现包含关系就可以了,完全不依赖 \(a\) 的
-
相当于 \(b_i\to c_i,b_j\to c_j\) 通过加 \(1\) \(c_j\to c_i\) 通过往上加子集。
-
其实可以 \(dp\) 了,维护 \(dp_i=dp_{i-1}+1\) 或 \(dp_i=dp_{i-2^k}\) 枚举所有合法的 \(k\)。然后在设 \(f_i=f_{i-1}+1\)
-
最后维护,最小值,次小值的起点,就可以合并啦

浙公网安备 33010602011771号