摘要:
Minimal Segment Cover 嗯嗯嗯。。 打倍增的时候两个for写反了查了半天bug。。。 我们先把没用的线段去掉, 然后对每个线段都找到和它接触的r最大的作为下一个, 然后打倍增就好了。 阅读全文
摘要:
Ultimate Weirdness of an Array 写不出来, 日常好菜啊。。 考虑枚举GCD, 算出一共有多少个对 f(l, r) <= GCD, 我们用fuc[ i ] 表示的是在 l = i 这个位置开始, 最小的合法的 R, 可以发现这个函数随 i 单调不下降, 枚举GCD 的时候 阅读全文
摘要:
Jeff and Removing Periods 题目转换一下就变成询问区间里面有多少个不同数字, 和区间里面有没有等差数列的相同数字。 离线之后可能分别用树状数组和线段树维护, 线段树维护数字等差数列能延续到的最右端。 阅读全文
摘要:
Ehab and the Expected GCD Problem 首先我们能推出最优的开始一定是2 ^ n 或者 3 * 2 ^ n 的形式, 对于每一种形式我们将所有数字分类, 从后往前用组合数算出答案。 阅读全文
摘要:
Legen... 我们能很容易写出在AC自动机上的dp, dp[ k ][ i ][ j ]表示走了 k 步从 i 走到 j 的最大值。 k 很大我们考虑矩阵优化, 直接搞就好啦。 不知道为什么在本机上M * M * M * M **** * M 打多了就会卡死不知道为什么。。。 阅读全文
摘要:
Best Edge Weight 我们先找出一棵最小生成树, 对于非树边来说, 答案就是两点路径上的最大值 - 1, 这个直接倍增就能处理。 对于树边来说, 就是非树边的路径经过这条边的最小值 - 1, 这个可以用并查集压缩路径 或者 更压st表一样的方式更新。 感觉就是没想到先扣出来一个最小生成树 阅读全文
摘要:
Ann and Half-Palindrome 我居然写了个后缀排序。。 其实暴力把所有合法串丢进字典树里面就行了。 阅读全文
摘要:
Erasing Substrings 感觉这种写法想不到啊。。。 dp[ i ][ j ] 表示选了 i 个, 删了的情况为 j 是否为字典序最小的串。 因为如果dp[ i ][ j ] 的字典序比 dp[ i ][ k ]的字典序小, dp[ i ][ k ] 就没有用了。 还需要sos dp 去 阅读全文