HDU 4300 Clairewd’s message(扩展KMP)
思路:extend[i]表示原串以第i開始与模式串的前缀的最长匹配。经过O(n)的枚举,我们能够得到,若extend[i]+i=len且i>=extend[i]时,表示t即为该点之前的串,c即为该点之前的str串,最后输出就可以。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
const int N=100010; char s[N],t[N];
char c[N];
int next[N],extand[N];
void getNext(int lt)
{
next[0]=lt;
int a=0;
while(a<lt-1&&t[a+1]==t[a]) a++;
next[1]=a;
a=1;
for(int k=2;k<lt;k++)
{
int p=a+next[a]-1;
int L=next[k-a];
if(k-1+L>=p)
{
int j=(p-k+1)>0? (p-k+1):0;
while(j+k<lt&&t[k+j]==t[0+j]) j++;
next[k]=j;
a=k;
}
else
next[k]=L;
}
} void getExtand(int ls,int lt)
{
getNext(lt);
int a=0;
int minLen=min(ls,lt);
while(a<minLen&&t[a]==c[a]) a++;
extand[0]=a;
a=0;
for(int k=1;k<ls;k++)
{
int p=a+extand[a]-1;
int L=next[k-a];
if(k-1+L>=p)
{
int j=(p-k+1)>0?(p-k+1):0;
while(j+k<ls&&j<lt&&t[j+k]==c[j]) j++;
extand[k]=j;
a=k;
}
else
extand[k]=L;
}
} int main()
{
int T;
cin>>T;
while(T--)
{
cin>>s>>t;
map<char,char> mmap;
int lt=strlen(t);
int ls=strlen(s);
for(int i=0;i<ls;i++)
mmap[s[i]]='a'+i;
for(int i=0;i<lt;i++)
c[i]=mmap[t[i]];
getExtand(lt,lt);
int i;
for(i=0;i<lt;i++)
{
if(i+extand[i]>=lt&&i>=extand[i])
break;
}
for(int j=0;j<i;j++) cout<<t[j];
for(int j=0;j<i;j++) cout<<c[j];
cout<<endl;
}
return 0; }
HDU 4300 Clairewd’s message(扩展KMP)的更多相关文章
- hdu 4300 Clairewd’s message(扩展kmp)
Problem Description Clairewd is a member of FBI. After several years concealing in BUPT, she interce ...
- hdu 4300 Clairewd’s message(kmp/扩展kmp)
题意:真难懂.. 给出26个英文字母的加密表,明文中的'a'会转为加密表中的第一个字母,'b'转为第二个,...依次类推. 然后第二行是一个字符串(str1),形式是密文+明文,其中密文一定完整,而明 ...
- HDU 4300 Clairewd's message ( 拓展KMP )
题意 : 给你一个包含26个小写字母的明文密文转换信息字符串str,第一个表示'a'对应的密文是str[0].'b'对应str[1]……以此类推.接下来一行给你一个另一个字符串,这个字符串由密文+明文 ...
- hdu 4300 Clairewd’s message KMP应用
Clairewd’s message 题意:先一个转换表S,表示第i个拉丁字母转换为s[i],即a -> s[1];(a为明文,s[i]为密文).之后给你一串长度为n<= 100000的前 ...
- HDU - 4300 Clairewd’s message (拓展kmp)
HDU - 4300 题意:这个题目好难读懂,,先给你一个字母的转换表,然后给你一个字符串密文+明文,密文一定是全的,但明文不一定是全的,求最短的密文和解密后的明文: 题解:由于密文一定是全的,所以他 ...
- hdu4300 Clairewd’s message 扩展KMP
Clairewd is a member of FBI. After several years concealing in BUPT, she intercepted some important ...
- hdu 4300 Clairewd’s message 字符串哈希
Clairewd’s message Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- hdu 4300 Clairewd’s message(具体解释,扩展KMP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4300 Problem Description Clairewd is a member of FBI. ...
- HDU 4300 Clairewd’s message(扩展KMP)题解
题意:先给你一个密码本,再给你一串字符串,字符串前面是密文,后面是明文(明文可能不完成整),也就是说这个字符串由一个完整的密文和可能不完整的该密文的明文组成,要你找出最短的密文+明文. 思路:我们把字 ...
随机推荐
- Linux下忘记rootpassword怎么办?
1.首先确认server出于安全的状态.也就是没有人可以随意地连接MySQL数据库. 由于在又一次设置MySQL的rootpassword的期间,MySQL数据库全然出于没有password保护的 ...
- Visual Studio跨平台开发实战(2) - Xamarin.iOS基本控制项介绍
原文 Visual Studio跨平台开发实战(2) - Xamarin.iOS基本控制项介绍 前言 在上一篇文章中, 我们介绍了Xamarin 以及简单的HelloWorld范例, 这次我们针对iO ...
- C++ 复制功能
C++ 复制功能 说C++复制功能,它可能不是很熟悉.类中的拷贝构造函数和赋值操作符.可是其实或许我们一不小心就会忽略编译器所做的一些默认操作.引起晦涩的错误.以下分析几种场景: 一.场景一:所有默认 ...
- WPF Delegate委托整理
那啥,是从这里整理出来的,感谢Rising_Sun,整理的过于简单,看不明白的戳这里 using System; using System.Collections.Generic; using Sys ...
- 二十7天 春雨滋润着无形 —Spring依赖注入
6月11日,明确."夏条绿已密,朱萼缀明鲜.炎炎日正午,灼灼火俱燃." IT人习惯把详细的事物加工成的形状一致的类.正是这种一致,加上合适的规范.才干彰显对象筋道的牙感和bean清 ...
- JNDI 什么
JNDI是 Java 命名与文件夹接口(Java Naming and Directory Interface).在J2EE规范中是重要的规范之中的一个,不少专家觉得,没有透彻理解JNDI的意义和作用 ...
- How to Compile Java DBus
1 download or git clone Java DBus git clone git://anongit.freedesktop.org/dbus/dbus-java dbus-java 2 ...
- 《实验数据的结构化程序设计》 2.4.4Calendar个人意见,寻求指引
题目大意: 制作一个日历系统,输入年份.一些周年纪念日,及服务要求日期,依据要求日期输出,输出重要程度小于发生日期的周年纪念日. 题目地址: UVA 145 个人见解: 纯模拟,在闰年,输出顺序及输 ...
- CSS+DIV+HTML(一)--HTML总结
一.定义 HTML(Hyper Text Markup Language),标记语言. 二.主要内容: HTML元素分为三类:块级标签.内联标签.可变标签.差别在于: 块级元素:在默认情况下会换行显示 ...
- 【Android先进】查看手机记忆库状态和应用方法
一世 我们知道.android程序存储器通常被限制16M.当然,24M的,和android程序存储器分为2部分:native和dalvik.dalvik 就是我们寻常说的java堆.我们创建的对象是在 ...