题目大意:首先给你第一串字符串(s1),让你删到一些字母,变成下面的字符串(s2),删除的字母会变成字符‘_’;
思路:用kmp算法让s1每一个单词在s1上匹配,从前面开始找,记得匹配成功过,i要跳一个位置,因为单词之间是有空格的,找到一个单词后,你要空一格。
kmp算法 具体参考:https://blog.csdn.net/dark_cy/article/details/88698736讲的超级好

代码:

#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <iomanip>
#include <sstream>
#include <set>
#include <map>
#include <bitset>
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define re register
#define lson rt<<1
#define rson rt<<1|1
#define lowbit(a) ((a)&-(a))
#define ios std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);
#define fi first
#define rep(i,n) for(int i=0;(i)<(n);i++)
#define rep1(i,n) for(int i=1;(i)<=(n);i++)
#define se secondusing namespace std;
typedef long long  ll;
typedef unsigned long long  ull;
typedef pair<int,int > pii;
const ll mod=10001;
const ll N =1e5+10;
const double esp = 1e-6;
//const double pi=acos(-1);
int gcd(int a,int b){return !b?a:gcd(b,a%b);}
//void exgcd(int a,int b,int& x,int& y){if(b == 0){x = 1 ;y = 0 ;return ;}exgcd(b,a%b,y,x);y-=x*(a/b);}
int dx[4]= {-1,0,1,0}, dy[4] = {0,1,0,-1};
int next1[N];
int dp[N];
int dp1[N];
int sum[N];
void get_next(string t)
{int j=0,k=-1;next1[0]=-1;while(j<t.length()-1){if(k == -1 || t[j] == t[k]){j++;k++;next1[j] = k;}else k = next1[k];}
}void solve()
{int idx=0;string s,a,b;getline(cin,s);getline(cin,a);stringstream ss(a);int i=-1;bool f=true;while(ss>>b){i++;//跳一格get_next(b);//cout<<b<<endl;int len=b.length();//for(int i=0;i<=len;i++) cout<<next[i]<<endl;int j=0;while(i<s.length()&&j<len)//匹配过程{if(j==-1 || s[i]==b[j]){i++;j++;}else j=next1[j];}if(j>=len){dp[idx]=i-len;//单词的第一个位置dp1[idx++]=i-1;//单词的最后一个位置//cout<<1<<endl;}else{f=false;//没有找到break;}}if(!f){puts("I HAVE FAILED!!!");return;}int x=0;for(int i=0;i<s.length();i++)//标记 将单词的位置标记一下,没有标记的字母变成'_'{if(i==dp[x]){for(;i<=dp1[x];i++){sum[i]=1;}i-=1;x++;}}for(int i=0;i<s.length();i++)//输出{if(sum[i]==1) cout<<s[i];elseif(s[i]==' ') cout<<" ";else{cout<<"_";}}}
int main()
{iosint T;//cin>>T;T=1;while(T--){solve();}return 0;
}

URAL - 1732 Ministry of Truth--kmp算法的应用(kmp模板)相关推荐

  1. (转)KMP算法原理讲解及模板C实现

    原作者:v_JULY_v 1. 引言 本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱.所以一直想找机会重新写下KMP,但苦于一直以来对KMP的理解始终不 ...

  2. kmp算法 php,漫画KMP算法-程序员小灰

    // KMP算法主体逻辑.str是主串,pattern是模式串 public static int kmp(String str, String pattern) { //预处理,生成next数组 i ...

  3. java kmp算法_java实现KMP算法

    第一种 暴力移位(效率低,资源浪费) 第二种KMP算法 这是直接盗用老师ppt中的内容,意思大家明白就好了,看代码: public class KMP { public int Index_KMP(S ...

  4. js实现kmp算法_基于KMP算法JavaScript的实现方法分析

    算法的核心是部分匹配表和回退算法,部分匹配表的实现如下: function kmpGetStrPartMatchValue(str) { var prefix = []; var suffix = [ ...

  5. BF算法优化-------KMP算法

    百度百科:KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特-莫里斯-普拉特操作(简称KMP算法).KMP算法的核心是利用 ...

  6. 数据结构与算法(5)字符串(BF算法、KMP算法及KMP算法优化)

    目录 一.BF算法(暴力算法) 二.KMP算法 三.KMP算法优化 一.BF算法(暴力算法) 一个一个往后匹配,匹配失败继续从母串下一个和头(子串的头)往后继续匹配. 虽然简单,但是需要较多的时间复杂 ...

  7. KMP算法--深入浅出

    说明: 在网上查了各种资料,终于对KMP算法有了透彻的了解,都说KMP特简单,我咋没有察觉呢?难道是智商不在线?或许都是骗纸? 还是进入正题吧,整理整理大佬的blog KMP算法简介: KMP算法是一 ...

  8. KMP算法~看的清楚~

    KMP算法 在介绍KMP算法之前,先介绍一下BF算法. 一.BF算法 BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个 ...

  9. 2020年最全最简单KMP算法讲解

    目录 1.KMP算法的来源 2.最大公共前后缀 3.KMP算法原理 4.next数组 5.next数组值的确定 6.KMP算法的缺陷 7.KMP算法的改进 1.KMP算法的来源 其实博主刚看KMP算法 ...

最新文章

  1. mysql数据库之linux版本
  2. 华为天才少年榜单遭受嘲讽:感觉水平一般,有点哗众取宠!
  3. php企业网站源码安装教程,PHPSCUP企业建站系统v1.4 安装图文教程
  4. CCNP张SIR的视频教程(完全可以下载)
  5. java维吉尼亚密码_java实现维吉尼亚加密/解密算法 | 学步园
  6. VS调试js学习总结
  7. Log4j2进阶使用(按大小时间备份日志)
  8. idea展示runDashboard的窗口
  9. 一步一步手写实现实时监测物体YOLO v3 EASY METHOD | OpenCV Python CNN卷积神经网络
  10. 什么是万物互联(IoE)?与物联网(IoT)的区别是什么?
  11. PQ分区魔术师图解教程
  12. 【xyplorer】通过右键新建word文件
  13. CAD碎片化学习教程 @4. 按比例放大或缩小图形尺寸
  14. 基于c语言c8051f系列微控制器原理与应用,基于C语言C8051F系列微控制器原理与应用...
  15. 2万 字的 Spring Cloud 总结,从此任何问题也难不住你
  16. va_list(),va_start()
  17. 日本政府部门敏感数据泄露,至少76000个专有信息被窃取
  18. 效能评估理论、方法及应用-效能评估系统软件方法有哪些
  19. 读文献“大数据可视分析综述”
  20. 撩课python视频下载_2018年撩课学院-Python+人工智能/JavaEE/Web全栈/全学科下载_IT教程网...

热门文章

  1. 柠檬汁制成的电池可以开动超100千克的车子吗?
  2. 清华姚班毕业生不配自信?张昆玮在豆瓣征女友,却被网友群嘲......
  3. 他让全世界凶手睡不着觉,现实版福尔摩斯,退休了4次又被拽回来工作,无敌实在是太寂寞了~...
  4. 牛顿如果穿越到现在,能看懂相对论和量子力学吗?
  5. 出这样的题,出题人的良心确定不会痛吗?
  6. ctf php sql注入,CTF—攻防练习之HTTP—SQL注入(SSI注入)
  7. redis 查询缓存_Redis缓存总结:淘汰机制、缓存雪崩、数据不一致....
  8. 秋招面试我去了拼多多,直接被问JVMGC底层原理和算法,我吊打面试官
  9. eeprom stm8l 擦除 读写_[STM8L]EEPROM操作读与写
  10. 欧几里得范数_从范数到正则化