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\)

  • 最后维护,最小值,次小值的起点,就可以合并啦

posted @ 2025-04-23 09:50  LUHCUH  阅读(20)  评论(0)    收藏  举报