贴两道题,其中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标准模板题的更多相关文章

  1. hdu 1711 KMP算法模板题

    题意:给你两个串,问你第二个串是从第一个串的什么位置開始全然匹配的? kmp裸题,复杂度O(n+m). 当一个字符串以0为起始下标时.next[i]能够描写叙述为"不为自身的最大首尾反复子串 ...

  2. HDU 2602 - Bone Collector - [01背包模板题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 Many years ago , in Teddy’s hometown there was a ...

  3. HDU 2544 最短路 【Dijkstra模板题】

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2544 思路:最短路的模板题 Dijkstra 算法是一种类似于贪心的算法,步骤如下: 1.当到一个点时, ...

  4. 【网络流#2】hdu 1533 - 最小费用最大流模板题

    最小费用最大流,即MCMF(Minimum Cost Maximum Flow)问题 嗯~第一次写费用流题... 这道就是费用流的模板题,找不到更裸的题了 建图:每个m(Man)作为源点,每个H(Ho ...

  5. HDU 1874 畅通工程续(模板题——Floyd算法)

    题目: 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让行人很困扰 ...

  6. HDU 1301-Jungle Roads【Kruscal】模板题

    题目链接>>> 题目大意: 给出n个城市,接下来n行每一行对应该城市所能连接的城市的个数,城市的编号以及花费,现在求能连通整个城市所需要的最小花费. 解题分析: 最小生成树模板题,下 ...

  7. 敌兵布阵 HDU - 1166 (树状数组模板题,线段树模板题)

    思路:就是树状数组的模板题,利用的就是单点更新和区间求和是树状数组的强项时间复杂度为m*log(n) 没想到自己以前把这道题当线段树的单点更新刷了. 树状数组: #include<iostrea ...

  8. HDU 2079 选课时间(母函数模板题)

    链接:传送门 思路:母函数模板题 /************************************************************************* > Fil ...

  9. hdu 3549 Flow Problem 最大流问题 (模板题)

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

随机推荐

  1. GitLab常用命令整理

    进入本地仓库访问位置之后执行命令 1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 查看远程仓库:$ git remote ...

  2. 网页title旁边的小图片

    网页title旁边的小图片设置,图片格式必须是.ico <link rel="icon" href="img/logo.ico" type="i ...

  3. vue实现pdf导出,解决生成canvas模糊等问题

    最近公司项目需要,利用vue实现pdf导出,从而保存到本地打印出来,说起来好像也很容易,具体要怎么实现呢? 1 .我们要添加两个模块 第一个.将页面html转换成图片 npm install --sa ...

  4. jquery 的extend的方法

    用flot.js  用到了jquery的extend 方法 关于extend方法 我就照手册打一遍,加深一下理解,说实话其实我理解的也不透 extend  用一个或多个其他对象来扩展一个对象,返回被扩 ...

  5. Servlet和JavaBean

    1.Servlet简介: Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间 ...

  6. Windows 10 下使用Git

    事实上,比在Linux下要难很多.不仅仅是因为Linux下CMD功能较弱,还有就是国内的网络环境,至少,我这Github Windows安装时,总是会下载无法完成 Github Desktop 虽然, ...

  7. 创建1M-1T的虚拟磁盘(内存盘)——使用破解版 Primo Ramdisk Server Edition v5.6.0

    破解版 Primo Ramdisk Server Edition v5.6.0下载: https://pan.lanzou.com/i0sgcne 步骤: 下载并解压后安装“Primo.Ramdisk ...

  8. js 对象字面量

    对象字面量的输出方式以及定义好处 1.对象字面量的输出方式有两种:传统的'.' 例如:box.name 以及数组方式,只不过用数组方式输出时,方括号里面要用引号括起来 例如:box['name'] v ...

  9. thinkphp 去掉URL 里面的index.php(?s=)

    例如你的原路径是 http://localhost/test/index.php/home/goods/index.html 那么现在的地址是 http://localhost/test/home/g ...

  10. NBU基本常用命令

    Veritas常用命令: 1. 查看当有运行的任务 bpdbjobs –report | grep Active 2. 停止任务 bpdbjobs –cancel PID (包括主任务和子任务) 3. ...