202610 杂题选做
QOJ 10506
非常有趣的题目。观察样例不难发现区分两个物品的方法就是两边同时加上一个子集,然后让其中一个超过分界线另一个不超过。
实际上这个观察并不显然,但是 GPT 给了一个比较有力的解释,稍后将给出。
然后剩下的问题是如何快速维护。
你发现首先有两个问题需要处理。第一个是你加入的物品有上线,第二个是每个物品只能用一次。
第二个限制通常都处理方法就是可删除背包。
但是考虑第一个限制,我们可能需要对背包做一些改造。比方说记录
另一方面是,我们一共有
我们还需要一个更强的性质。
我们发现,我们实际上希望用一个子集合将两个物品从中间分开来。
那么,假设存在一种方案区分
此时假设有
首先如果这个方案里没有
不妨假设
后面所有的表达式全部省略掉对
那么仍然有
右侧同理。
但是这个性质仍然不够强劲啊。发现还是没有用。
我们还有更加强力的性质。假设
证明其实本质还是上面的交换论证。假设存在区分
如果
否则,我们根据
如果前者比较大,考虑把
和上面的理由一样,我们不会对下取整后的值产生影响,因此我们可以直接对余数进行加减。
然后由于实际上超过
所以
否则,把
不等式推一推发现可以区分
过程是类似的。
感觉我的表述有点混乱。反正大概是这样一张图:


(真的有人能看懂吗。)
GPT 给出的观察就是,就是不可区分当且仅当交换物品质量不会改变任意子集的称重结果。
然后仔细想一下就发现这个其实非常对。而且可以很天然的给出不可比传递性的性质。
因为如果
那么,后续就是划分出这些等价类。
如果两个元素包含了一个可比对,那么就不在一个等价类。否则就在。
因此不可比关系构成的图是一个团。另一方面,我们还发现不可比的点是连续的(因为可比也是有传递性的,不可能出现断点)。
我们只需要找到相邻的两个元素,检查这两个元素是否满足条件即可。
套路的,我们可以考虑线段树分治来解决。
CF2268C KiaKio and Energy Intervals
赛时看到区间
首先注意到位运算相关,因此我们考虑从高位往低位贪心。我们要检测的是是否有一个答案是
换句话说,答案和
那么我们可以考虑先把所有数都按位与一下。那么首先答案和区间最大值需要按位与,那么只有区间最大值是
因此我们只需要将所有数和
P8366 题
注意到只有三种情况:
直接子序列自动机全扔到状态里 DP 即可。
复杂度七次方。
P7949 左方之地
牛大了。
首先考虑什么时候有解。注意到每个数都是从
因此我们把所有
那么假设维度是
这个题目看上去很像格雷码的描述,因而可以从格雷码的角度去思考。但是格雷码是相邻元素差一位。 我们希望把这个转化一下。
首先我们找到一组基底,满足每个元素的
然后我们有
我们希望相邻两项只差一个
你发现考虑一个
然后你发现每个二进制数唯一对应了一个元素。我们发现按照格雷码的顺序排列这个二进制数,把对应的排列取出来就对了。相邻两项差一个基中的元素。
本质上是给每个向量乘上一个矩阵换基。然后相差一个元素的性质就保留到了相差基里一个元素。
也有硬构造的方法。但是这个做法牛大了所以不说。
AT_arc160_f Count Sorted Arrays
超级牛逼题目。
首先考虑一个转化。
考虑把一个序列转化成
我们对每一个字符串建点,一个排列唯一对应了
QOJ 3307. 树上查询 17
口胡了一个比较大的做法。