Educational Codeforces Round 94 题解

我竟然比到了全场的 rk 14,incredible!

A

大水题,直接输出 \(n\)\(s_n\) 即可。

B

分类讨论题,放在 B 题可能难度有点大了。
直接暴力枚举你拿了多少个宝剑,然后贪心地计算出你随从最多可以带多少把武器。
把它们加起来取一个 \(\max\) 就行了

C

简单构造,如果 \(s_i=0\) 那么就把 \(w_{i-x}\)\(w_{i+x}\) 上填 \(0\)。其余位置上都填 \(1\)
然后回过头来过来 check 一遍,如果不合法就输出 \(-1\),否则

D

暴力跑一遍前缀和 \(s_{i,j}\) 表示 \([1,i]\) 有多少个 \(a_k=j\)
然后枚举 \(j,k\) 乘法原理计算出 \(i,l\) 的个数

E

同 CF448C,我抄我自己。
考虑清空一个区间 \([l,r]\)。那么显然只有两种方法:

  1. 不断横着清空,直到序列中有数为 \(0\)
  2. 竖着清空 \(r-l+1\) 次。

分治递归即可。

F

sb 题啊~~为什么我考场上没 rush 出来?
显然可以预处理出所有 x-prime 的字符串——最多 \(2399\) 个。
然后对原串建 AC 自动机。
考虑 \(dp_{i,j}\) 表示在前 \(i\) 位中,现在到达了 AC 自动机上的节点 \(j\),最少删去的字符数。
考虑转移,分两种情况:

  1. 删除第 \(i+1\) 个字符,那么肯定还停留在原先的节点上。\(dp_{i,j}+1 \to dp_{i+1,j}\)
  2. 保留第 \(i+1\) 个字符,那么 \(j\) 就会变为 \(j\) 的第 \(s[i+1]-'0'\) 个儿子。\(dp_{i,j} \to dp_{i+1,son[j][s[i+1]-'0'}\),当然,此种情况必须满足一个条件,那就是 \(son[j][s[i+1]-'0'\) 不是任何一个 x-prime 的字符串的结尾。

G

https://www.luogu.com.cn/blog/et2006/solution-cf1400g

posted @ 2020-08-30 22:28  tzc_wk  阅读(126)  评论(0)    收藏  举报