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 ...
随机推荐
- django找不到模板的错误处理django.template.exceptions.TemplateDoesNotExist: blog/list.html
错误提示如下图: 程序出错对于程序员而言是最常见的,一般解决的要点是看清错误提示(读懂英文很重要) 根据错误提示 blog\list.html这个文件不存在,也就是没找到资源 这个时候需要去检查有没有 ...
- Mysql字符串截取_获取指定字符串中的数据
前言:本人遇到一个需求,需要在MySql的字段中截取一段字符串中的特定字符,类似于正则表达式的截取,苦于没有合适的方法,百度之后终于找到一个合适的方法:substring_index('www.sql ...
- MTDDL 美团分布式数据访问中间件(转)
MTDDL 美团分布式数据访问中间件(转) 原文地址:MTDDL--美团点评分布式数据访问层中间件 因原文文字和图显示有问题,故整理于此,仅供参考. 业界方案 组件 简介 Atlas Qihoo 36 ...
- C# 结合 PInvoke 对接 IP 摄像头的笔记
最近做项目的时候,需要对接厂商提供的 IP 摄像头.但是他们只提供了 C++ 的 SDK,没办法,只能开始撸 C# 的 SDK Helper 类.本篇文章主要记录了对接 C++ DLL 需要注意的几个 ...
- iviewer插件
jQuery-iviewer插件的使用 iviewer是一个具有缩放和图像旋转功能的图像查看小部件. 在jQuery官网下载后,有很多文件. 直接把文件夹解压拖到项目里. 然后再html中引入主要的文 ...
- Electron npm install 常见错误(Linux)
Linux版本 Ubuntu 12.04 (32bit) 安装Git sudo apt-get install git 生成ssh key #查看有没有sshkey cd ~/.ssh #生成 ssh ...
- Android8.1 SystemUI源码分析之 电池时钟刷新
SystemUI源码分析相关文章 Android8.1 SystemUI源码分析之 Notification流程 分析之前再贴一下 StatusBar 相关类图 电池图标刷新 从上篇的分析得到电池图标 ...
- vue.js 本地解决跨域
1.config/index.js下添加proxyTable dev: { // Paths assetsSubDirectory: 'static', assetsPublicPath: '/', ...
- VMware安装Linux提示此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态
问题: 原因: 这是由于没有开启虚拟技术导致的. 解决: 进入电脑BIOS设置,将"Inter Virtual Technology"设置为"Enabled", ...
- 教你如何在5分钟轻松部署squid正向代理
正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返 ...