Codeforces 2100 DS 杂题选做
CF1056E
题意
给定一个 \(01\) 串 \(t\) 和一个字母串 \(s\),求有多少对字符串 \((r_0, r_1)\) 满足 \(r_0 \neq r_1\) 且将 \(t\) 中的 \(0\) 都换成 \(r_0\),\(1\) 都换成 \(r_1\) 后,得到的字符串与 \(s\) 相同。
\(2 \leq |t| \leq 10^5\),\(1 \leq |s| \leq 10^6\),\(t\) 中至少存在一个 \(0\) 和一个 \(1\)。
题解
由于我们知道\(0\)和\(1\)的数量,所以我们枚举\(r_0\)的长度便可以求出\(r_1\)的长度
然后枚举\(t\)求出每一段的\(hash\)值,如果所有\(1\)的段相同,所有\(2\)的段相同\(ans\)++
考虑如何证明复杂度
我们枚举\(len\),然后里面一重循环只需要\(n/len\)次,所以总复杂度\(O(n)\)
CF981E
题意
- 给定一个长度为 \(n\) 的序列,和 \(q\) 条操作。
- 序列初始为全 \(0\)。\(q\) 条操作都形如 \(l, r, x\),意为给序列 \([l, r]\) 区间内的每个数加上 \(x\)。
- 对于 \(1 \leq k \leq n\),求有多少个 \(k\) 满足从 \(q\) 条操作中选出若干条操作后序列的最大值为 \(k\)。(对于一个 \(k\),一条操作最多进行一次)。
- 第一行输出满足条件的 \(k\) 的个数,第二行输出所有的 \(k\)。
- \(1 \leq n, q \leq 10^4\)。
题解
咕