
KMP
二分抄代码
去了18ec没资格去19ec的反向训练选手
展开
-
gym102431B Infimum of Paths 2019CCPC Final
https://codeforces.com/gym/102431/problem/B这个B想到超过n的都是在一个循环里就好了,所以直接跑2n个点,如果跑到了1说明可以直接结束了我们跑的时候只记录最小边值前缀,和末尾点集,记得去重,不然可能2^n增加,这样就保证了每个长度最多只有n个末尾点如果跑满了2n的长度,那么n到2n中间一定包含了一个循环然后由于我们只记录了边值没有记录点值所以找个最大循环节就一定包含了真正的循环节了,用kmp找即可那么就是len-nxt[len]的长度的循环节原创 2020-11-27 00:06:46 · 928 阅读 · 0 评论 -
HDU 5763
KMP,预处理nxt,然后去文本串中匹配,f[i]表示前i个字母有多少种意思,当匹配到i成功时,说明i-len+1.....i可以表达为2种意思,所以f[i]=f[i-1]+f[i-len]。想了许久,暴露了我的sb智商#include#include#define maxl 100010#define mod 1000000007int cas,tlen,slen;int f[m原创 2017-08-08 18:06:38 · 336 阅读 · 0 评论 -
CodeForces 432D
这题也想了很久,智商捉急。求相同前缀和后缀在串中出现了多少次,用num数组表示出现了多少次,由于next数组树的性质,而且一定保证越后面的深度约大,所以先把num数组全赋值为1,然后再从后往前扫,num[nxt[i]]+=num[i]#include#include#define maxl 1000020int n,tlen,cnt;int nxt[maxl],num[ma原创 2017-08-08 18:35:38 · 402 阅读 · 0 评论 -
牛客多校第9场F Typing practice
改题面以后就是很裸的对4个字符串kmp了,一开始板子写错了,WA20%,然后改对后是kmpTLE80%,后来发现这个字符串匹配不是普通的字符串,比如s数组为aaaaaab-b-b-,t数组是aaaaaaaa,那么每次加入一个b字母,j=nxt[u][j]就要不停地调到0,这样复杂度会退化为tlen*slen.....普通字符串不会是因为每次匹配出来的长度都在模式串和文本串中同时出现,而这个文本串是...原创 2018-08-16 22:11:48 · 348 阅读 · 2 评论 -
hdu6740 MUV LUV EXTRA
http://acm.hdu.edu.cn/showproblem.php?pid=6740kmp水题,由于是a*已出现长度-b*循环节长度,所以说循环节越小越好,那么联想到kmp求nxt数组的时候可以知道当前长度i的最小循环节是i-nxt[i],所以直接把小数点后面的数字反过来,然后求一遍nxt数组,边求边记录最大值。由于kmp的nxt数组是从第二位开始向本身匹配的,所以ans的初值赋值...原创 2019-09-28 19:19:23 · 291 阅读 · 0 评论