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;
    }
    
  • 相关阅读:
    Spider 爬虫
    python 数据分析几个重要点!!!
    python 接口开发<小demo>
    python 运维那些事儿~ <转>
    centos7 Docker 安装 (转)
    centos7+nginx+uwsgi+python3+django
    linux 用户组 文件权限
    Linux 进阶命令(二)转
    centos7 vi命令
    基于UDP协议的socket套接字编程
  • 原文地址:https://www.cnblogs.com/juechen/p/5255909.html
Copyright © 2011-2022 走看看