首页 > 其他分享 >CF1408I

CF1408I

时间:2023-12-27 21:22:25浏览次数:41  
标签:xor text 减去 CF1408I Delta msk dp

Hyperlink

题意很明白,不复述了吧 qwq

solution

一个数 \(a_i\) 减去 \(\Delta\) 之后对整个数组的异或和会造成 \(a_i~\text{xor}~(a_i-\Delta)\) 的影响。所有数的影响 \(\text{xor}\) 起来就是对整个数组的影响总和。

值域不大可以塞到 dp 状态里,已经减去的总和也可以塞进去。就设计出状态 \(dp_{i,j,msk}\) 表示考虑前 \(i\) 个数,总共减去了 \(j\),总影响是 \(msk\) 的方案数。

直接背包做,第一维可以滚掉,复杂度 \(O(2^cnk^2)\),是不能够的。

由于输入的数组是无序的,所以可以想办法按一种顺序排,优化 dp。

第一维肯定没啥可优化的。比较大的就剩 \(msk\) 了。

注意一下数据的其他性质:

  • 输入的数组中所有数均不相同。

  • \(k\) 很小。

观察到一个数 \(x\) 减去 1 造成的影响 \(x~\text{xor}~(x-\Delta)\) 的位数几乎不超过 \(x\) 的 \(\text{lowbit}\) 的位数,除非 \(x\) 的 \(\text{lowbit}\) 在最低几位。

而满足减去 \([1,k]\) 中一个数后 \(\text{lowbit}=2^p\) 的数只有 \(O(\dfrac{2^c}{2^p}k)\) 个。如果状态第三维的总和是 \(\sum 2^p O(\dfrac{2^c}{2^p}k)=O(2^cck)\) 就可以接受了!

为了保证 dp 可以正常转移,我们把所有 \(a_i\) 按照其减去 \([1,k]\) 内能产生的影响的最大值从小到大排序,这样就可以正确转移了。

复杂度是 \(O(2^cck^3)\),可以通过。

code

Submission #238945073 - Codeforces

标签:xor,text,减去,CF1408I,Delta,msk,dp
From: https://www.cnblogs.com/FreshOrange/p/17931464.html

相关文章