Censoring S

    技术2022-07-11  87

    题目链接:Censoring S


    因为每次都是找一个个位置,所以我们可以考虑用一个栈维护最早出现的位置。

    然后怎么判断当前栈顶的字符串是否满足呢?AC自动机或者字符串hash都可。


    AC代码:

    #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10; const int mod=1e9+3,base=1321; int s[N],top,p[N]={1},tmp,len; char a[N],b[N],c[N]; inline int get(int l,int r){return (s[r]-s[l-1]*p[r-l+1]%mod+mod)%mod;} signed main(){ for(int i=1;i<N;i++) p[i]=p[i-1]*base%mod; scanf("%s %s",a+1,b+1); for(int i=1;b[i];i++) tmp=(tmp*base+b[i])%mod,len++; for(int i=1;a[i];i++){ s[top+1]=(s[top]*base+a[i])%mod; c[++top]=a[i]; if(top>=len&&get(top-len+1,top)==tmp) top=top-len; } for(int i=1;i<=top;i++) printf("%c",c[i]); return 0; }
    Processed: 0.012, SQL: 10