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

题解

posted @ 2022-08-07 22:39  xzj213  阅读(39)  评论(0编辑  收藏  举报