1. 程式人生 > >P4824 [USACO15FEB]Censoring (Silver) 審查(銀)

P4824 [USACO15FEB]Censoring (Silver) 審查(銀)

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];
int
main() { 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) 審查(銀)