cf之kmp匹配稍稍改一改
看样例就知道要干嘛了
http://codeforces.com/contest/1200/problem/E
每次我们用新的串和答案串匹配,答案串的匹配位置是max(0,(int)ans.size()-(int)s.size()),这样可以降低时间复杂度。答案串是S,新串是T。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1000000+66;
const ll mod=1e9+7;
int n;
string s[maxn];
string ans;
int nexts[maxn];
void getnexts(string t)
{
int len=t.size();
int i=0;
int j=-1;
nexts[0]=-1;
while(i<len)
{
if(j==-1||t[i]==t[j])
{
i++;
++j;
if(t[i]!=t[j])
nexts[i]=j;
else
nexts[i]=nexts[j];
}
else
{
j=nexts[j];
}
}
}
int kmp(string &s,string &t,int pos)//s是答案串
{
int i=pos;//
int j=0;
int sl=s.size();
int tl=t.size();
while(i<sl)
{
if(j==-1||s[i]==t[j])
{
++i;
++j;
}
else
{
j=nexts[j];
}
}
return j;
}
void add(string s)
{
getnexts(s);
int pos=kmp(ans,s,max(0,(int)ans.size()-(int)s.size()));
for(int i=pos; i<s.size(); i++)
{
ans.push_back(s[i]);
}
}
int main()
{
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
cin>>s[i];
}
ans=s[1];
for(int i=2; i<=n; i++)
{
add(s[i]);
}
cout<<ans;
}
cf之kmp匹配稍稍改一改的更多相关文章
- 【poj 3167】Cow Patterns(字符串--KMP匹配+数据结构--树状数组)
题意:给2个数字序列 a 和 b ,问按从小到达排序后,a中的哪些子串与b的名次匹配. a 的长度 N≤100,000,b的长度 M≤25,000,数字的大小 K≤25. 解法:[思考]1.X 暴力. ...
- BNUOJ-26580 Software Bugs KMP匹配,维护
题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=26580 题意:给一个模式串,然后m个匹配串,要求删掉匹配串中的所有存在的模式串,使得余下的 ...
- kmp匹配详解
字符串算法都是毒瘤的 一.kmp算法的用处 在文本串中查找模式串的位置,数量 文本串:要在这个字符串查找模式串 模式串:在文本串中查找的字符串 全是废话 二.kmp算法的思想 话说kmp好像是3个发明 ...
- TYVJ P1068 STR Label:KMP匹配 不懂
描述 给你两个串A,B,可以得到从A的任意位开始的子串和B匹配的长度.给定K个询问,对于每个询问给定一个x,求出匹配长度恰为x的位置有多少个.N,M,K<=200000 输入格式 第一行三个数 ...
- KMP(匹配)
Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input 输入中含有一些数据, ...
- 流动python - 字符串KMP匹配
首先我们看一下简单的字符串匹配. 你可以把文本字符串s固定,模式字符串p从s对齐的左边缘,作为承担部分完全一致,匹配成功,失败将是模式字符串p整体向右1地点,继续检查对齐部分,重复. #朴素匹配 de ...
- AC自动机——多个kmp匹配
(并不能自动AC) 介绍: Aho-Corasick automaton,最经典的处理多个模式串的匹配问题. 是kmp和字典树的结合. 精髓与灵魂: ①利用trie处理多个模式串 ②引入fail指针. ...
- POJ 3080 Blue Jeans 找最长公共子串(暴力模拟+KMP匹配)
Blue Jeans Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20966 Accepted: 9279 Descr ...
- 【字符串】跳来跳去的KMP匹配
原理: 不给予证明啦(懒得一批 但是代码中有给还算详细的注释 参考:https://www.cnblogs.com/yjiyjige/p/3263858.html 模板题: 洛谷P3375: http ...
随机推荐
- Java并发面试问题,谈谈你对AQS的理解
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- ES6 ... 展开&收集运算符
...展开&收集运算符,也就是说他可以干两件事情,展开和收集 一:收集,顾名思义把散列东西收集到一个地方,这个地方ES6规定收集在数组中 例如:下面函数fn将传递的参数收集在arg变量中,打印 ...
- QT执行shell脚本或者执行linux指令
由于我在做linux下的QT开发,有时候会用到shell脚本的辅助,但是需要QT运行shell脚本并获取执行结果,今天给大家分享下我的技巧,废话少说直接上代码: //执行shell指令或者shell脚 ...
- Python输出16进制不带0x补零,整数转16进制,字符串转16进制
Python输出16进制不带0x补零,整数转16进制,字符串转16进制 在开发中,我们偶尔会遇到需要将数据通过控制台打印出来,以检查数据传输的准确性.例如调试服务端刚接到的二进制数据(里面包含很多 ...
- 设计冲刺Design Sprint - 阅读记录
改进团队流程: 审查了头脑风暴 - brain storming的成果,真正付诸实践并且获得成功的想法并不是来自大喊大叫的头脑风暴.而是来自静下心来的一次思考. 1. 搭建舞台 在开始设计冲刺之前,你 ...
- ftp上传文件,上传的文件大小是0
此问题是最近出现,代码和配置完全没改,试过所有的办法,两天了一直都解决不了,用完弃坑. 防火墙.被动模式主动模式,编码,服务端内存,日志,common-net.jar版本问题,服务端配置,nginx配 ...
- python判断文件夹和文件是否存在
1.os.path.exists()既可以判断文件是否存在,又可以判断文件夹是否存在 2.os.path.isfile()判断文件是否存在 3.os.path.isdir()判断文件夹是否存在
- 基于django中间件的编程思想
目录 前言 前期准备 importlib模块介绍 基于django中间件的编程思想 django中settings源码 配置文件的插拔式设计 基于django中间件的思想,实现功能配置 前言 在学习d ...
- supervisor 工具使用
最近项目要使用supervisor 来管理程序,简单查了查,发现比较容易使用: 中文博客查了查,发现很多人都写出了教程,我这边就懒得写了,找了几个能看懂的记录如下: https://www.cnblo ...
- 表单生成器(Form Builder)之伪造表单数据番外篇——随机车辆牌照
前几天记录了一下表单生成器(Form Builder)之表单数据存储结构mongodb篇,之后便想着伪造一些数据.为什么要伪造数据呢?说来惭愧,因为拖拉拽设计表单以及表单对应的列表的PC端和移动端该显 ...