zoukankan      html  css  js  c++  java
  • 2015弱校联盟(1)

    C. Censor
    Time Limit: 2000ms
    Memory Limit: 65536KB

    frog is now a editor to censor so-called sensitive words (敏感词).

    She has a long text p. Her job is relatively simple – just to find the first occurence of sensitive word w and remove it.

    frog repeats over and over again. Help her do the tedious work.
    Input
    The input consists of multiple tests. For each test:

    The first line contains 1 string w. The second line contains 1 string p.

    (1≤length of w,p≤5⋅106, w,p consists of only lowercase letter)
    Output
    For each test, write 1 string which denotes the censored text.
    Sample Input

    abc
    aaabcbc
    b
    bbb
    abc
    ab

    Sample Output

    a

    ab

    KMP+模拟栈

    #include <bits/stdc++.h>
    #define LL long long
    #define ULL unsigned long long
    #define fread() freopen("in.in","r",stdin)
    #define fwrite() freopen("out.out","w",stdout)
    #define VI vector<int>
    #pragma comment(linker, "/STACK:1024000000,1024000000")
    
    using namespace std;
    
    const int Max = 1e6;
    
    char s[Max*5+100];
    
    char c[Max*5+110];
    
    char ans[Max*5+110];
    
    int Next[Max*5+100];
    
    int pre[Max*5+100];
    
    int len1,len2;
    
    void Get_Next()
    {
        int i=0,j=-1;
        Next[0]=-1;
        while(i<len1)
        {
            if(j==-1||s[i]==s[j])
            {
                i++;
                j++;
                Next[i]=j;
            }
            else
            {
                j=Next[j];
            }
        }
    }
    
    void Kmp()
    {
        int k=0;
        int j=0;
        for(int i=0;i<len2;i++,k++)
        {
            ans[k]=c[i];
            while(j>0&&c[i]!=s[j])
            {
                j=Next[j];
            }
            if(c[i]==s[j])
            {
                j++;
            }
            if(j==len1)
            {
                k-=len1;
                if(k==-1) j=0;
                else  j=pre[k];
    
            }
            if(k!=-1)
            {
                pre[k]=j;
            }
            ans[k+1]=0;
        }
        ans[k+1]=0;
    }
    
    int main()
    {
        while(~scanf("%s %s",&s,&c))
        {
            len1=strlen(s);
            len2=strlen(c);
            Get_Next();
            Kmp();
            printf("%s
    ",ans);
        }
        return 0;
    }
    
  • 相关阅读:
    “王者对战”之 MySQL 8 vs PostgreSQL 10
    PostgreSQL 进程结构
    Linux core dump 诊断进程奔溃退出
    linux下core dump--转载
    2.4 等比数列
    2.3 等差数列的前n项和
    2.2 等差数列
    1.1.1 三角形正弦定理
    调整颜色
    去括号法则
  • 原文地址:https://www.cnblogs.com/juechen/p/5255909.html
Copyright © 2011-2022 走看看