总结
CF1849D
设dp[i][0/1/2]为涂到i,涂完最后一个数为j的最小代价
对于每个点,可以自己涂,也可以找前面的涂,也可以自己涂了再往前涂一点
我们发现每次涂一个点影响范围是从它开始往后连续正数段长度+1
那么将这些段预处理出来,直接递推即可
CF898F
这个题直接用双哈希,哈希值具有可加性,所以直接把哈希值加起来就能做到判断分段正确性
假设分成a,b,c三个部分,a+b=c
可以发现len(c)==max(len(a), len(b)) + (0/1)
所以直接枚举max(a,b), c的长度,每个判断一次,输出结果即可
因为把前导零s[i]!='0'写成了s[i]!=0导致错了5发。。。。
CF1721E
这个题可以先把前面n个字符的fail预处理出来
对于每次的t直接暴力处理
P4824
KMP,在跑KMP的时候发现,只要有匹配上的直接删掉是没有影响的
那么我们可以直接跑KMP,遇到匹配上的直接从前面不被删除的部分继续往后跑
记录答案就用数组模拟栈,匹配上了就弹出,最后从前往后输出答案
CF176B
这题是看了题解的,
设dp[i][0]表示进行i次变化之后原串个数
dp[i][1]表示进行i次变化之后其他串个数
dp[i][0] = x * dp[i - 1][1] + (x - 1) * dp[i - 1][0];
dp[i][1] = (len - x) * dp[i - 1][0] + (len - x - 1) * dp[i - 1][1];
一路递推,但是要注意可能出现的取模和初始值问题