20230720练习总结

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)\)

CF1556G Gates to Another World

好水的一道题。反向加区间,把点放在线段树的结构上,子树缩到根上。

posted @ 2023-07-21 21:26  牛肉爱吃dks  阅读(10)  评论(0编辑  收藏  举报