思路: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)的更多相关文章

  1. hdu 4300 Clairewd’s message(扩展kmp)

    Problem Description Clairewd is a member of FBI. After several years concealing in BUPT, she interce ...

  2. hdu 4300 Clairewd’s message(kmp/扩展kmp)

    题意:真难懂.. 给出26个英文字母的加密表,明文中的'a'会转为加密表中的第一个字母,'b'转为第二个,...依次类推. 然后第二行是一个字符串(str1),形式是密文+明文,其中密文一定完整,而明 ...

  3. HDU 4300 Clairewd's message ( 拓展KMP )

    题意 : 给你一个包含26个小写字母的明文密文转换信息字符串str,第一个表示'a'对应的密文是str[0].'b'对应str[1]……以此类推.接下来一行给你一个另一个字符串,这个字符串由密文+明文 ...

  4. hdu 4300 Clairewd’s message KMP应用

    Clairewd’s message 题意:先一个转换表S,表示第i个拉丁字母转换为s[i],即a -> s[1];(a为明文,s[i]为密文).之后给你一串长度为n<= 100000的前 ...

  5. HDU - 4300 Clairewd’s message (拓展kmp)

    HDU - 4300 题意:这个题目好难读懂,,先给你一个字母的转换表,然后给你一个字符串密文+明文,密文一定是全的,但明文不一定是全的,求最短的密文和解密后的明文: 题解:由于密文一定是全的,所以他 ...

  6. hdu4300 Clairewd’s message 扩展KMP

    Clairewd is a member of FBI. After several years concealing in BUPT, she intercepted some important ...

  7. hdu 4300 Clairewd’s message 字符串哈希

    Clairewd’s message Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  8. hdu 4300 Clairewd’s message(具体解释,扩展KMP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4300 Problem Description Clairewd is a member of FBI. ...

  9. HDU 4300 Clairewd’s message(扩展KMP)题解

    题意:先给你一个密码本,再给你一串字符串,字符串前面是密文,后面是明文(明文可能不完成整),也就是说这个字符串由一个完整的密文和可能不完整的该密文的明文组成,要你找出最短的密文+明文. 思路:我们把字 ...

随机推荐

  1. MySQL创建用户权限结果Trigger失败

    说来惭愧,MySQL我已经在只将用于,非常赞赏阶段. 甚至一些比较深层次的管理,不熟悉如何,我们要加强啊! 最近.系统测试,使用MySQL数据库,你需要在表上创建触发器.该数据库是安装在机.但.在任何 ...

  2. JS正则验证邮箱的格式

    一.相关的代码  1  function test()  2         {  3            var temp = document.getElementById("text ...

  3. 建立qemu桥接的网络连接

    转载请注明出处谢谢:http://www.openext.org/2014/07/qemu-kvm-bridge-00     安装桥接工具:sudo apt-get install bridge-u ...

  4. POJ1163 The Triangle 【DP】

    The Triangle Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36918   Accepted: 22117 De ...

  5. WPF对于xml的简单操作(下下)插入节点并排序

    正如T所说,下下,这个方法不堪入目, ̄□ ̄|| 贴上再说 //先搞个struct声明 private struct datastruct { public string x; public strin ...

  6. Windows Phone开发(28):隔离存储B

    原文:Windows Phone开发(28):隔离存储B 上一节我们聊了目录的操作,这一节我们继续来看看如何读写文件. 首先说一下题外话,许多朋友都在摇摆不定,三心二意,其实这样的学习态度是很不好的, ...

  7. 445port入侵详细解释

    445port入侵具体解释   关于"445port入侵"的内容445port入侵具体解释本站搜索很多其它关于"445port入侵"的内容 445port入侵, ...

  8. GRUB2配置详解:默认启动项,超时时间,隐藏引导菜单,配置文件详解,图形化配置

    配置文件详解: /etc/default/grub # 设定默认启动项,推荐使用数字 GRUB_DEFAULT=0 # 注释掉下面这行将会显示引导菜单 #GRUB_HIDDEN_TIMEOUT=0 # ...

  9. Windows 8 应用开发 - 异步调用

    原文:Windows 8 应用开发 - 异步调用     不论是桌面客户端还是Web应用通常会出现处理时间较长的操作,为了在这段时间内不影响用户与应用之间的交互体验,开发人员通常会使用异步调用技术,使 ...

  10. ovs处理openflow消息的流程

    OVS处理各个openflow消息的详细代码在 ofproto/ofproto.c 中: static enum ofperr handle_openflow__(struct ofconn *ofc ...