zoukankan      html  css  js  c++  java
  • [USACO15FEB]Censoring (Silver)

    WA了一万次。。。。

    然后发现多输出了一个空格

    我#$%^&

    启示我们输出字符的时候应该输出ASCII码看一下。。。。

    然后本题可以用烤馍片算法,每次匹配完以后看看当前最后一位的nxt数组的值是多少,然后补齐到 lenT 。

    下次匹配的时候直接从上次匹配过的最后一个开始匹配就行了。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    char s[1000005],t[1000005],u[2000005];
    int nxt[2000005],top,lent,lens,last;
    void kmp() {
        for(int i=last+1,j=nxt[last];i<=top;i++) {
            while(j&&u[i]!=u[j+1]) j=nxt[j];
            if(u[i]==u[j+1]) j++;
            nxt[i]=j;
        }
    }
    int main() {
        scanf("%s%s",s,t);
        lens=strlen(s),lent=strlen(t);
        for(int i=0;i<lent;i++) 
            u[i+1]=t[i],u[i+lent+2]=s[i];
        top=lent+lent+1;
        u[lent+1]=' ';
        int tp=lent-1;
        for(int i=2,j=0;i<=lent+lent+1;i++) {
            while(j&&u[i]!=u[j+1]) j=nxt[j];
            if(u[i]==u[j+1]) j++;
            nxt[i]=j;
        }
        last=1;
        while(tp<lens) {
            kmp();
            if(nxt[top]==lent) top-=lent;
            last=top;
            for(int i=1;i<=lent-nxt[last]&&tp<lens;i++) 
            u[++top]=s[++tp];
        }
        for(int i=lent+2;i<top;i++) printf("%c",u[i]);
    }
    Censoring
    我是咸鱼。转载博客请征得博主同意Orz
  • 相关阅读:
    [NOI2021] 路径交点
    CF1188D Make Equal
    CF1349F1 Slime and Sequences
    CF1067D Computer Game
    Dcat Admin安装
    PHP 中提示undefined index如何解决(多种方法)
    Git 常用命令大全
    项目维护环境部署
    bootstrap-table
    bootstrap-datetimepicker
  • 原文地址:https://www.cnblogs.com/sdfzhsz/p/9737141.html
Copyright © 2011-2022 走看看