只记录有教育意义的题。
CF898F
首先考虑如何快速 check 是否合法,即判断 \(a+b=c\),这个东西理论上需要准备 \(10^5\) 个素数判余数相同,但是直接使用 \(O(1)\) 个竟然是对的!
然后就简单了,根据加法的性质,枚举 \(c\) 后只要枚举 \(\le 3\) 个 \(a\) 即可。
CF1721E
kmp 自动机。实际上就是记录前缀 \(i\) 后面插入 \(c\) 后会转移到哪个前缀(单串 AC 自动机?)。
CF1310C
对所有子串排序,然后二分。问题转化为求分成 \(m\) 段,每段字典序 \(> S\) 的方案数。
观察到以 \(i\) 为左端点,字典序 \(> S\) 的子串的右端点 \(j\) 是一段后缀。
那么设 \(dp_{i,j}\) 表示 \(i\) 后缀,分 \(j\) 段的方案数,配合后缀和优化转移即可。