HDU 2087 HDU 1867 KMP标准模板题
贴两道题,其中HDU2087是中文题,故不解释题目,
思路是,一发KMP,但是特别处理最后一位的失配边为0,这样就可以保证“判断完成但是不多判断”。
第二题,很毒瘤的题,要求求出,给定字符串A,B能够缠到一起组成的子字符串长度“长度较小且字典序较小”的一个。。。。要求,假设str1+str2组成答案,则str1的后缀和str2的前缀中相同的部分,只出现一次。。于是做法就是,两法KMP,特判答案咯。。。然而。。。。此题。。最有难度的地方是读懂提。。。。看了别人的提解读懂得。。。。
2087AC代码:
#include<bits/stdc++.h>
using namespace std; const long long MAXN=;
long long f[MAXN];
char str1[MAXN];
long long len1;
char str2[MAXN];
long long len2; bool init()
{
cin>>str1;
if(str1[]=='#')return false;
cin>>str2;
len1=strlen(str1);
len2=strlen(str2);
f[]=;
f[]=;
for(int i=;i<len2;++i)
{
int j=f[i];
while(j&&str2[i]!=str2[j])j=f[j];
f[i+]= str2[i]==str2[j]? j+:;
}f[len2]=;
return ;
} int main()
{
while(init())
{
long long summ=;
int j=f[];
for(int i=;i<=len1;++i)
{
if(j==len2)summ++;
while(j&&str1[i]!=str2[j])j=f[j];
j= str1[i]==str2[j]? j+:;
}cout<<summ<<"\n";
} }
1867AC代码:
#include<bits/stdc++.h>
using namespace std;
const long long MAXN=;
class str
{
public:
int f[MAXN];
char s[MAXN];
int len;
};
str s1,s2;
string ans1,ans2;
void init()
{
s1.f[]=;s1.f[]=;
s2.f[]=;s2.f[]=;
ans1.clear();
ans2.clear();
s1.len=strlen(s1.s);
s2.len=strlen(s2.s);
for(int i=;i<s1.len;++i)
{
int j=s1.f[i];
while(j&&s1.s[i]!=s1.s[j])j=s1.f[j];
s1.f[i+]= s1.s[i]==s1.s[j] ? j+:;
}
for(int i=;i<s2.len;++i)
{
int j=s2.f[i];
while(j&&s2.s[i]!=s2.s[j])j=s2.f[j];
s2.f[i+]= s2.s[i]==s2.s[j] ? j+:;
}
} bool com(string &str1,string &str2)
{
int len=min(str1.length(),str2.length());
for(int i=;i<len;++i)
{
if(str1[i]!=str2[i])
{
if(str1[i]<str2[i])break;
else return false;
}
}
return ;
}
int main()
{
cin.sync_with_stdio(false);
while(cin>>s1.s>>s2.s)
{
init();
int j=;
for(int i=;i<s1.len;++i)
{
ans1.push_back(s1.s[i]);
while(j&&s1.s[i]!=s2.s[j])j=s2.f[j];
j= s1.s[i]==s2.s[j]? j+:;
}
for(;j<s2.len;++j)
{
ans1.push_back(s2.s[j]);
}
j=;
for(int i=;i<s2.len;++i)
{
ans2.push_back(s2.s[i]);
while(j&&s2.s[i]!=s1.s[j])j=s1.f[j];
j= s2.s[i]==s1.s[j]? j+:;
}
for(;j<s1.len;++j)
{
ans2.push_back(s1.s[j]);
}
if(ans1<=ans2&&ans1.length()<=ans2.length())
{
cout<<ans1<<"\n";
}else cout<<ans2<<"\n";
}
return ;
}
HDU 2087 HDU 1867 KMP标准模板题的更多相关文章
- hdu 1711 KMP算法模板题
题意:给你两个串,问你第二个串是从第一个串的什么位置開始全然匹配的? kmp裸题,复杂度O(n+m). 当一个字符串以0为起始下标时.next[i]能够描写叙述为"不为自身的最大首尾反复子串 ...
- HDU 2602 - Bone Collector - [01背包模板题]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 Many years ago , in Teddy’s hometown there was a ...
- HDU 2544 最短路 【Dijkstra模板题】
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2544 思路:最短路的模板题 Dijkstra 算法是一种类似于贪心的算法,步骤如下: 1.当到一个点时, ...
- 【网络流#2】hdu 1533 - 最小费用最大流模板题
最小费用最大流,即MCMF(Minimum Cost Maximum Flow)问题 嗯~第一次写费用流题... 这道就是费用流的模板题,找不到更裸的题了 建图:每个m(Man)作为源点,每个H(Ho ...
- HDU 1874 畅通工程续(模板题——Floyd算法)
题目: 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让行人很困扰 ...
- HDU 1301-Jungle Roads【Kruscal】模板题
题目链接>>> 题目大意: 给出n个城市,接下来n行每一行对应该城市所能连接的城市的个数,城市的编号以及花费,现在求能连通整个城市所需要的最小花费. 解题分析: 最小生成树模板题,下 ...
- 敌兵布阵 HDU - 1166 (树状数组模板题,线段树模板题)
思路:就是树状数组的模板题,利用的就是单点更新和区间求和是树状数组的强项时间复杂度为m*log(n) 没想到自己以前把这道题当线段树的单点更新刷了. 树状数组: #include<iostrea ...
- HDU 2079 选课时间(母函数模板题)
链接:传送门 思路:母函数模板题 /************************************************************************* > Fil ...
- hdu 3549 Flow Problem 最大流问题 (模板题)
Flow Problem Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
随机推荐
- GitLab常用命令整理
进入本地仓库访问位置之后执行命令 1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 查看远程仓库:$ git remote ...
- 网页title旁边的小图片
网页title旁边的小图片设置,图片格式必须是.ico <link rel="icon" href="img/logo.ico" type="i ...
- vue实现pdf导出,解决生成canvas模糊等问题
最近公司项目需要,利用vue实现pdf导出,从而保存到本地打印出来,说起来好像也很容易,具体要怎么实现呢? 1 .我们要添加两个模块 第一个.将页面html转换成图片 npm install --sa ...
- jquery 的extend的方法
用flot.js 用到了jquery的extend 方法 关于extend方法 我就照手册打一遍,加深一下理解,说实话其实我理解的也不透 extend 用一个或多个其他对象来扩展一个对象,返回被扩 ...
- Servlet和JavaBean
1.Servlet简介: Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间 ...
- Windows 10 下使用Git
事实上,比在Linux下要难很多.不仅仅是因为Linux下CMD功能较弱,还有就是国内的网络环境,至少,我这Github Windows安装时,总是会下载无法完成 Github Desktop 虽然, ...
- 创建1M-1T的虚拟磁盘(内存盘)——使用破解版 Primo Ramdisk Server Edition v5.6.0
破解版 Primo Ramdisk Server Edition v5.6.0下载: https://pan.lanzou.com/i0sgcne 步骤: 下载并解压后安装“Primo.Ramdisk ...
- js 对象字面量
对象字面量的输出方式以及定义好处 1.对象字面量的输出方式有两种:传统的'.' 例如:box.name 以及数组方式,只不过用数组方式输出时,方括号里面要用引号括起来 例如:box['name'] v ...
- thinkphp 去掉URL 里面的index.php(?s=)
例如你的原路径是 http://localhost/test/index.php/home/goods/index.html 那么现在的地址是 http://localhost/test/home/g ...
- NBU基本常用命令
Veritas常用命令: 1. 查看当有运行的任务 bpdbjobs –report | grep Active 2. 停止任务 bpdbjobs –cancel PID (包括主任务和子任务) 3. ...