P4824 [USACO15FEB]Censoring (Silver) 審查(銀)
阿新 • • 發佈:2018-09-21
com har http https 一個 ret censoring col kmp
傳送門
一個串的匹配肯定考慮KMP
那就暴力KMP
記錄一下到每個字符時匹配的位置
找到一個符合的串就標記然後暴力回跳
感覺好像太暴力了...
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int N=1e6+7; char ch[N],a[N]; int f[N],match[N]; bool pd[N]; intmain() { scanf("%s",ch); scanf("%s",a); int len=strlen(ch),la=strlen(a),k=0; for(int i=1;i<la;i++) { while(k&&a[i]!=a[k]) k=f[k]; f[i+1]= a[i]==a[k] ? ++k : 0; } //以下為暴力匹配 int i=0; k=0; while(i<len) { while(k&&a[k]!=ch[i]) k=f[k];if(a[k]==ch[i]) k++; if(k==la)//找到匹配就暴力回跳 { int j=1; while(j<=la) { if(pd[i]) { i--; continue; } pd[i]=1,i--; j++; } while(pd[i]) i--;//最後還要跳一波 k=match[i]; } match[i]=k; i++; while(pd[i]) i++; } for(int i=0;i<len;i++) { if(pd[i]) continue; cout<<ch[i]; } return 0; }
膜一下CRK大佬,用的是AC自動機%%%
P4824 [USACO15FEB]Censoring (Silver) 審查(銀)