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 ...
随机推荐
- linux系统的安全小知识
最近安装linux虚拟机,出了几个小问题:1. 只有root用户 2.ftp连接不上 3.ssh连接虚拟机如何免密 1.创建用户 useradd –d /usr/sam -m sam 创建用 ...
- 常用CSS3属性整理
常用CSS3属性整理 文本 文本超出部分折叠 white-space:nowarp; overflow:hidden; text-overflow:ellipsis word-warp 边界换行 no ...
- Android 常用RGB值及名称
Android 常用RGB值及名称 颜 色 RGB值 英文名 中文名 #FFB6C1 LightPink 浅粉红 #FFC0CB Pink 粉红 #DC143C Crimson 深红/猩红 #F ...
- 【MFC】将当前的日期转化为1970年开始的秒计数
CTime time1 = CTime::GetCurrentTime(); int nTSeconds = time1.GetTime(); CTime time2(,,,,,); nTSecond ...
- 编译安装PHP-7.1.8
安装依赖包: 1.安装yasm cd /usr/local/src tar zxvf yasm-1.3.0.tar.gz cd yasm-1.3.0 ./configure make make ins ...
- OpenSSL context 的几个参数
NAME SYNOPSIS DESCRIPTION NOTES BUGS RETURN VALUES EXAMPLES SEE ALSO NAME SSL_CTX_set_verify, SSL_se ...
- YII2 定义页面提示
控制器里面这样写: 单条消息: 键值是规定好的,不要去自定义哦! \Yii::$app->getSession()->setFlash('error', 'This is the mess ...
- Dll注入:x86/X64 SetThreadContext 注入
在<Windows核心编程>第七章说到了线程优先级等知识,其中谈到了ThreadContext线程上下背景文. 其中介绍了GetThreadContext函数来查看线程内核对象的内部,并获 ...
- 报 "错误: 无法取消引用int" 的问题解决纪录
很久没上博客园了,估计有一年左右了,最近在写一个android的小工具应用,今天写多国语言时,引用 string.xml里面的值,R.string.XXX时,突然报 『错误: 无法取消引用int』,我 ...
- 集成Ehcache用来缓存表以后,怎么设置缓存刷新时间
问答 集成Ehcache用来缓存表以后,怎么设置缓存刷新时间 发布于 217天前 作者 老司机 93 次浏览 复制 上一个帖子 下一个帖子 标签: 无 集成Ehcache用来缓存表以后, ...