- CF1967B2 0.25 数学 积累trick \(c|d\) 隐藏了一个 \(c<=d\)
- 首先我很快推出来的是,设 \(a = c\cdot k,b = d \cdot k\),且 \(\gcd(c,d)=1\),则条件 \(b \cdot \gcd(a,b)\) 是 \(a+b\) 的倍数可以转化为 \(c+d | k\),关键性质是 \(\gcd(c+d,c) = \gcd(c,d) = 1\),故 \(c+d|d\cdot k\) 可以变为 \(c+d|k\),故我们,到这里我想的是看看能不能直接莫比乌斯反演,然后我发现毕竟困难/jk,然后这里思路就断了
- 观摩了题解我发现了一个特别牛的性质就是说 \(c+d|k\) 则 \(c<k,d<k\) 则 \(c<\frac{a}{c}\) 故 \(c^2 < a\) 故我们可以直接枚举 \(c\) 和 \(d\) 进行计算
- 感觉没做出来的话是因为没有想到 \(c|d\) 可以转化成 \(c<=d\)
- P10465 0.25 发现题目性质题,ad
- 首先我想到了考虑最终状态,每个双端队列的下标一定是 先递减再递减的,元素是 单调不降的,并且元素是在从小到大排序后的序列中连续的一段
- 所以我就考虑是否可以把所有元素从小到大排序,记录初始的下标,然后去贪心地选择序列即可
- 相同的元素一定是要放在同一个集合的,不然会无解或者不优
- CF1997E 0.25 线段树,树状数组
- 法一
- 感觉想的很快,就是直接从 \(k=n\) 开始从大到小枚举k,我们可以发现怪物肯定是由被选择变成不被选择的,故我们直接上可持久化线段树维护
- 对于每个 \(k\) 直接线段树上二分 \(\frac{n}{k}\) 次即可,二分总和为 \(O(N \log{N})\) 的加上 \(\log{N}\) 的复杂度就是 \(O(N \log{N}^2)\) 的,空间是 \(N \log{N}\) 的
- 这道题几乎是10min不到就想出来了的,证明自己的线段树敏感度增强了
- 法二
- 带上了一点点脑子,我们可以预处理 \(f_i\) 表示最小的能让第 \(i\) 个怪物进行战斗的 \(k\)
- 然后用二分用树状数组维护即可,可以优化空间
- 法一
- CF2004E 0.25 SG函数
- 很明显是一道博弈论的题目,发现有 \(n\) 堆实际上只需要把每一堆的 SG 值异或起来就行了
- 考虑如何求解 SG 值
- 考虑 SG 值的定义是 SG(0) = 0,SG(1) = 1, SG(2) = 0
- \(x>=3\) 若 \(x\) 是质数
- 则 \(SG(x) = mex_{y=1}^{x-1} {SG(y)}\)
- 很容易发现它的值就是它是第几个质数
- 若 \(x\) 不是质数
- 则 \(SG(x) = mex_{y=1}^{x-1} {SG(x-y)}, (x,y) = 1\)
- 然后这里我卡了很久,大概20多min,实在做不下去牢了翻了题解,发现题解 “通过打表发现……”
- 积累trick : 遇到SG函数题的方式最好是打一个表后再猜结论再证明
- 所以可以发现合数 \(x\) 的 \(SG(x) = SG(y)\) 其中 \(y\) 是 \(x\) 的最小质因子