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

思路:我们把字符串当做全是密文然后解密成明文,这样前面密文部分就是完整的明文,后面明文部分就乱码了,要求最短密文+明文就是求最短的密文,就是求原串和解密后的串的最大公共前缀,所以用EXMP求解。

坑爹了,前面没加‘\0’后面加了WA了一早上...orz

#include<cstdio>
#include<map>
#include<set>
#include<queue>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define ll long long
const int maxn = 100000+5;
const int MOD = 10007;
const int INF = 0x3f3f3f3f;
using namespace std;
int Next[maxn],extend[maxn];
char trans[30],s1[maxn],s2[maxn];
char kk[30];
void getNext(char *x){
int len = strlen(x);
Next[0] = len;
int j = 0;
while(j + 1 < len && x[j] == x[j + 1]) j++;
Next[1] = j;
int k = 1;
for(int i = 2;i < len;i++){
int p = Next[k] + k - 1;
int L = Next[i - k];
if(i + L < p + 1)
Next[i] = L;
else{
j = max(0,p - i + 1);
while(i + j < len && x[i + j] == x[j]) j++;
Next[i] = j;
k = i;
}
}
}
void ExKMP(char *y,char *x){
getNext(x);
int j = 0;
int lenx = strlen(x);
int leny = strlen(y);
while(j < leny && j < lenx && x[j] == y[j]) j++;
extend[0] = j;
int k = 0;
for(int i = 1;i < leny;i++){
int p = extend[k] + k - 1;
int L = Next[i - k];
if(i + L < p + 1)
extend[i] = L;
else{
j = max(0,p - i + 1);
while(i + j < leny && j < lenx && y[i + j] == x[j]) j++;
extend[i] = j;
k = i;
}
}
}
int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%s%s",kk,s1);
for(int i = 0;i < 26;i++)
trans[kk[i] - 'a'] = i + 'a'; //密文转化为明文
int len = strlen(s1);
for(int i = 0;i < len;i++)
s2[i] = trans[s1[i] - 'a'];
s2[len] = '\0';
//printf("%s\n%s\n",s1,s2);
ExKMP(s1,s2);
//for(int i = 0;i < len;i++) printf("%d ",extend[i]);
int i;
for(i = 0;i < len;i++){
if(i + extend[i] >= len && i >= extend[i]){
break;
}
}
len = len - extend[i];
s1[len] = s2[len] = '\0';
printf("%s%s\n",s1,s2);
}
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)

    思路:extend[i]表示原串以第i開始与模式串的前缀的最长匹配.经过O(n)的枚举,我们能够得到,若extend[i]+i=len且i>=extend[i]时,表示t即为该点之前的串,c即为 ...

随机推荐

  1. MQTT的学习研究(五) MQTT moquette 的 Blocking API 发布消息服务端使用

    参看官方文档: http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/index.jsp?topic=/com.ibm.mq.amqtat.doc/t ...

  2. Android反编译技术总结

    一.Apk反编译工具及其使用方法 1.原理 学习反编译之前,建议先学习一下Apk打包的过程,明白打包完成后的Apk里面都有什么文件,各种文件都是怎么生成的. 这里有两篇AndroidWeekly中推荐 ...

  3. sencha touch 组件选择器getCmp和ComponentQuery.query()的效率解析

    昨天无意中在网上看到一篇讲解sencha touch组件选择器的文章,名为 Sencha touch 2通过Ext.ComponentQuery.query查找组件. 里面对组件选择器的效率讲解完全反 ...

  4. 破谣言——iPhone砍价

    微信朋友圈和QQ空间很多朋友在传一个iPhone砍价免费送的活动.好吧,砍页面下面的那邪恶广告,第一感觉就是假的.但我要给出证明,所以就有了下面的代码.[只需把UID换成自己的就行],当你砍到5分钱的 ...

  5. CentOS7 部署tomcat

    一.环境说明: 在 CentOS7下面部署tomcat7 . 二.tomcat部署 1.新建tomcat目录  mkdir tomcat 2.上传tomcat 安装文件   apache-tomcat ...

  6. Spring-Boot整合freemarker引入静态资源css、js等

    一.概述 springboot 默认静态资源访问的路径为:/static 或 /public 或 /resources 或 /META-INF/resources 这样的地址都必须定义在src/mai ...

  7. centos7yum下载安装报:软件包与预期下载的不符。建议:运行 yum --enablerepo=updates clean metadata尝试其他镜像

    centos7yum下载安装报:软件包与预期下载的不符.建议:运行 yum --enablerepo=updates clean metadata尝试其他镜像. rm -f /var/lib/rpm/ ...

  8. C++中的.和::和:和->的区别

    在学习C++的过程中我们经常会用到.和::和:和->,在此整理一下这些常用符号的区别. 1.A.B则A为对象或者结构体: 2.A->B则A为指针,->是成员提取,A->B是提取 ...

  9. Python开发【笔记】:进程

    序言 进程与线程概述: 很多同学都听说过,现代操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任务”的操作系统. 什么叫“多任务”呢?简单地说,就是操作系统可以同时运 ...

  10. display属性的表格布局相关属性

    基于CSS属性display:table的表格布局的使用   项目改造中遇到DIV+CSS实现的table,新需求需要在表格使用单元格合并,网上调查返现CSS display:table实现的tabl ...