CF1523H Hopping Around the Array
写在前面:毒瘤翻译!!!原题面有一句 "A grasshopper can hop around the sells according to the following rule" 翻译过来就是不能删去起点和终点,翻译题面没有这句话!!!调了一个下午,答案一直比标答小!!!
先忽略询问的终点,那么从 \(i\) 起跳,一定是跳到 \([i,i+a_i]\) 中 \(j+a_j\) 最大的 \(j\)。
考虑设倍增处理步数,设 \(dp_{i,j,k}\) 表示删 \(k\) 个点,从 \(i\) 开始跳,跳了 \(2^j\) 步,能跳到的使 \(i+a_i\) 最大的 \(i\)。初始值用 ST 表处理。
思考如何计算答案,由于 \(r\) 有可能并不是最优路径上的点,所以应该将可以一步跳到 \(r\) 的点作为目标。设 \(ans_i\) 表示删 \(i\) 个点恰好无论如何都跳不到可以一步跳到 \(r\) 的点的最大步数。那么最终答案就应该是 \(ans_k+2\)。
从大到小考虑步长。如果加入步长后满足无论如何不能跳到可以一步跳到 \(r\) 的点则加入。最后答案为 \(res+2\)。
CF1654F Minimal String Xoration
可以观察到一个有趣的事情,异或的数二进制第 \(k\) 位为 \(1\) 代表将字符串分成若干长度为 \(2^k\) 的段后奇数段和偶数段互换。
可以类比后缀数组的构造方式。
设异或 \(x\) 得到的字符串为 \(f(x)\)。则 \(f(x)\) 的前 \(2^k\) 位和 \(f(x\otimes 2^k)\) 的第 \(2^{k}+1\) 到 \(2^{k + 1}\) 位相同。然后就像后缀数组一样,\(n\) 次基数排序。时间复杂度 \(O(n2^n)\)。
标签:总结,个点,练习,异或,步长,答案,20230720,步数 From: https://www.cnblogs.com/dks-and-xiao-yu/p/17572438.html