$KMP$,链表。

将$p$弄成链表,每次匹配到,删掉中间的,继续匹配。

#include<bits/stdc++.h>
using namespace std;const int INF = 0x7FFFFFFF;
const int mod = 1e9 + 7;
const int N = 5e6 + 10;
const int M = 1e4 + 1;
const double eps = 1e-10;
int T,n,m;char w[N],p[N];
int L[N],R[N],h;
int lenp,lenw;
int t[N];
int nt[N];void init()
{nt[0] = -1;for (int i = 0; w[i]; i++){int k = nt[i];while (k >= 0 && w[i] != w[k]) k = nt[k];nt[i + 1] = k + 1;}
}int main()
{while(~scanf("%s%s",w,p+1)){lenp=strlen(p+1); lenw = strlen(w);for(int i=1;i<=lenp;i++) L[i]=i-1,R[i]=i+1;init(); R[0]=1; L[lenp+1] = lenp; t[0]=nt[1];for (int i = R[0], j = nt[1]; p[i];){t[i]=j;if (j < 0 || p[i] == w[j]){i=R[i], j++;if (!w[j]){int sum=0;for(int u=L[i];;u=L[u]){if(sum==lenw){j=t[u];i=u;if(i==0) i=R[0];break;}int x=L[u];int y=R[u];R[x]=y;L[y]=x;sum++;}}}else j = nt[j];}for(int i=R[0];i!=lenp+1;i=R[i]){printf("%c",p[i]);}printf("\n");}return 0;
}

转载于:https://www.cnblogs.com/zufezzt/p/6648392.html

SCU 4438 Censor相关推荐

  1. 【哈希-字符串匹配+模拟栈】SCU - 4438: Censor(哈希详解哈哈哈)

    写在前:由于哈希没有好好听讲,也没有下来看.这是排位我开的第一道题,直接string暴力T了.昨天其实就看了哈希,太浮躁,于是本来很简单的哈希愣是没看懂.(于是放弃去看爱5了23333333)今天补上 ...

  2. ACM: SCU 4438 Censor - KMP

    SCU 4438 Censor Time Limit:0MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Practice Des ...

  3. SCU - 4438——Censor(哈希)

    题目链接:http://acm.scu.edu.cn/soj/problem.action?id=4438 题意:给出一个串a和串b,串b中如果有a串则删除,删除后b剩下的串再连到一起,再找串a,反复 ...

  4. SCU - 4438 Censor

    Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text pp. Her j ...

  5. SCU - 4438 Censor

    Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text p . Her j ...

  6. SCU - 4438 Censor (KMP)

    Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text pp. Her j ...

  7. SCU 4438:Censor

    Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text p . Her j ...

  8. SCU 4438 Censor (KMP)

    题目大意: 就是现在给出两个字符串A, B, 长度都不超过500万, 要求每次将B中第一次A的出现删除, 然后将B剩下的两段前后合并, 然后重复这个过程直到没有可以删除的A位置, 问最后剩下的串是什么 ...

  9. SCU 4438 Censor(Hash)题解

    题意:找出字符串p中的w串删除,反复操作,直到找不到w,输出这个串 思路:哈希处理前缀和,如果值相同就删掉. 代码: #include<iostream> #include<algo ...

最新文章

  1. golang并发和并行
  2. java 先序遍历_二叉树的前序中序后序遍历(java代码)
  3. 重学java基础第五课:博客的重要性
  4. oracle单表存储记录,oracle从各个表获得数据保存到另一个表
  5. cxVerticalGrid赋值是实时更新
  6. java程序员语录_2019精选java程序员语录大全
  7. 微信打飞机思路总结 蓝懿教育
  8. lavaral中文手册_Laravel5.3手册下载
  9. 筛选中很容易粘贴到被隐藏部分_在Excel中粘贴时如何跳过隐藏行
  10. python数据平滑处理,numpy之数据平滑处理
  11. 【网站排名软件】如何让网站关键词快速排名到首页
  12. 大学计算机基础超详细知识点(高手总结),大学计算机基础超详细知识点(高手总结)免费-...
  13. 学习狂神mybatis
  14. electron-rebuild
  15. 【基础】java操作word,自动更新目录/域
  16. 高等数学(第七版)同济大学 习题9-4 (前11题)个人解答
  17. Pinyin4J使用方法
  18. 《黑客帝国》或颠倒的两面
  19. srsLTE 源码分析 UE_06 PLMN选择之SIB1
  20. 小微商家大调查:三成是夫妻店,八成受假钞困扰

热门文章

  1. linux 抓包文件 导出,tcpdump抓包和scp导出以及Wireshark查看
  2. 强制生成32位arm程序_ARM版本系列及家族成员梳理
  3. 编写java程序的三步骤_帮助Java小白涨知识的教程(三)(运行HelloWorld程序)
  4. css中float详解,CSS浮动属性Float详解?史上最全Float详解
  5. debian 8 mysql_在Debian 8系统安装 nginx + php + mysql(MariaDB) 基本Web环境
  6. html鼠标点击伪类,CSS伪类:CSS3鼠标滑过按钮动画
  7. oracle 给表空间改名,Oracle重命名表空间和删除表空间
  8. 小爱音箱怎么装app_79元的Redmi小爱音箱怎么样?这里有一份体验报告
  9. mysql+rownumber的用法_mysql中如何实现row_number
  10. chrome插件 vscode_2020年,前端开发者必备的10个VS Code扩展插件