codeforces #299 div2 D(Kmp || hash)
来源:互联网 发布:纳溪区网络问政平台 编辑:程序博客网 时间:2024/06/05 12:02
从前往后依次考虑每个位置的覆盖,前后两次可能会有很大的交集,该交集正好是原串n位置的所有可行前缀失配点。
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 1e6 + 10000;int f[maxn],n,m,ok[maxn],vis[maxn];char str[maxn];const int mod = 1000000007;int get_fail(char* P){ memset(ok,0,sizeof(ok)); int len = strlen(P); f[0] = f[1] = 0; for(int i=1;i<len;i++){ int j=f[i]; while(j && P[i]!=P[j]) j=f[j]; if(P[i]==P[j]) j++; f[i+1] = j; } int j = len; while(j){ ok[j] = 1; j = f[j]; }}int main(){ scanf("%d %d",&n,&m); scanf("%s",str); get_fail(str); int len = strlen(str); memset(vis,0,sizeof(vis)); int flag = 1,last = -1; for(int j=1;j<=m;j++){ int x; scanf("%d",&x); x--; if(!flag) continue; if(last<x){ for(int i=x;i<x+len;i++) { vis[i] = 1; } } else{ int co = last-x+1; if(!ok[co]){ flag = 0; } else{ for(int i=last+1;i<x+len;i++){ vis[i] = 1; } } } last = x+len-1; } if(flag){ long long res = 1; for(int i=0;i<n;i++) if(!vis[i]){ res=(res*26)%mod; } printf("%I64d\n",res); } else printf("0\n"); return 0;}
0 0
- codeforces #299 div2 D(Kmp || hash)
- codeforces 93 div2 D题 - kmp- 3
- codeforces 400(div2) D
- codeforces#ff(div2 D)
- Codeforces 292 div2 D
- codeforces #310 div2 D
- Codeforces 353 div2 D
- Codeforces #331 Div2 D
- Codeforces #332 Div2 D
- Codeforces 395 div2 D
- Codeforces 526D Om Nom and Necklace kmp+hash
- CF 299 div2 D. Tavas and Malekas(KMP)
- codeforces 136 div2 D题
- CodeForces #156 Div2 D题
- CodeForces Round 230 Div2 D
- codeforces div2 round#230 D
- Codeforces Round #317div2 D
- (BFS)codeforces #Round354-div2-D
- POJ_2449_K最短路问题(单源最短路径+A*算法)
- android JNI
- Android 自定义过滤搜索框
- NOJ 1860 保研(0/1背包概率dp)
- 黑马程序员_多线程学习小结
- codeforces #299 div2 D(Kmp || hash)
- IOS7 8中tableview分割线缺少15像素
- vsftpd ftp client ls command implementation source code
- Python实现ssh批量登录并执行命令
- 第六周项目六复数类模板(2)
- JTextArea设置滚动条
- 关于char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT、L
- hibernate延迟加载与OpenSessionInViewFilter
- 第六周 阅读程序(2)