CF1415D XOR-gun
给你一个不降的序列,每次可以把两个相邻的数替换成它们的异或结果,问你破坏序列不降最少的操作次数。
这题 n ≤ 1 0 5 n\leq 10^5 n≤105 包括 最少 的限制都是来吓唬你的。
那么一个区间经过若干次操作后就变成了区间的异或和。
所以我们想到 o(n^3) 的暴力枚举:

但是这个复杂度不合理啊,我们可以想到如果三个相邻的数的最高位相同,那么对后两个数操作一次就可以把最高位抵消掉,这样只操作一次必然最优。
简单计算可得序列长度不能超过 30 ∗ 3 = 90 30*3=90 30∗3=90 也就是说 n ≥ 100 n\geq 100 n≥100 直接输出 1 1 1 即可。
总结一下的话,这道题的操作没有什么显然的规律性,所以我们考察一些特定情况对它作一些限制,就会得到复杂度比较低的算法。
再举一例:CF1198C Matching vs Independent Set
这题评分不高但是对构造题理解不深的童鞋难度较大。
首先边和点的规模就决定了大多数图论算法都过不去。
如果你能想到去找一个极大的边独立集的话问题就迎刃而解了。
现在我们有大小为 2 k 2k 2k 的边独立集和 3 n − 2 k 3n-2k 3n−2k 的点独立集(其定义是两两之间无边相连),必有一个可以满足条件。

浙公网安备 33010602011771号