BZOJ 3942 Censoring
Posted ziliuziliu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ 3942 Censoring相关的知识,希望对你有一定的参考价值。
KMP。
怎么描述做法呢。。。“持久化”一下?
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 1000050 using namespace std; char s[maxn],t[maxn]; int l1,l2,nxt[maxn],pre[maxn],aft[maxn],ts[maxn]; bool flag[maxn]; void get_nxt() { int cnt=0; for (int i=2;i<=l1;i++) { while (cnt && s[cnt]!=s[i-1]) cnt=nxt[cnt]; if (s[cnt]==s[i-1]) cnt++; nxt[i]=cnt; } for (int i=0;i<=l2;i++) pre[i]=i-1,aft[i]=i+1; aft[l2-1]=-1; } void kmp() { int cnt=0; for (int i=0;i<l2;i++) { while (cnt && s[cnt]!=t[i]) cnt=nxt[cnt]; if (s[cnt]==t[i]) cnt++; ts[i]=cnt; if (cnt==l1) { int now=i; for (int j=1;j<=l1;j++) { flag[now]=true; now=pre[now]; } cnt=ts[now];pre[i+1]=now; } } } int main() { scanf("%s",t);l2=strlen(t); scanf("%s",s);l1=strlen(s); get_nxt(); kmp(); for (int i=0;i<l2;i++) if (!flag[i]) printf("%c",t[i]); printf("\n"); return 0; }
以上是关于BZOJ 3942 Censoring的主要内容,如果未能解决你的问题,请参考以下文章
BZOJ 3942: [Usaco2015 Feb]Censoring
BZOJ_3942_[Usaco2015 Feb]Censoring_KMP
bzoj3940[Usaco2015 Feb]Censoring*