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

思路:我们把字符串当做全是密文然后解密成明文,这样前面密文部分就是完整的明文,后面明文部分就乱码了,要求最短密文+明文就是求最短的密文,就是求原串和解密后的串的最大公共前缀,所以用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. 【Spring Boot && Spring Cloud系列】构建Springboot项目 实现restful风格接口

    项目代码如下: package hello; import org.springframework.boot.SpringApplication; import org.springframework ...

  2. Android 简单案例:继承BaseAdapter实现Adapter

    import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import ...

  3. linux下php安装

    nginx中配置php:  http://www.111cn.net/sys/nginx/64044.htm

  4. Activity 设置切换动画

    extends://blog.csdn.net/luohaowang320/article/details/42124225 | http://blog.csdn.net/xuewater/artic ...

  5. java如何随机生成定长的字符串

    小数,字符串.时间等示例代码 String base = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 public c ...

  6. mysql如何查询日期的列表?

    转自:http://blog.csdn.net/liufei198613/article/details/72643345 select @num:=@num+1,date_format(adddat ...

  7. tensorflow和python操作中的笔记

    前一段时间做了一些项目,把一些笔记放在了txt中,现分享出来,自己也能够时长预习. 1) 读取文件时,将固定的文件地址,采用数组或者字符串的形式,提前表示出来,后期使用时候采用拼接操作 2) # 得到 ...

  8. htop 分析 进程对资源的消耗

    [root@d ~]# htop -hhtop 2.2.0 - (C) 2004-2018 Hisham MuhammadReleased under the GNU GPL. -C --no-col ...

  9. ansible(3)

    一.setup模块 ansible的setup模块主要用来收集信息,查看参数: [root@localhost ~]# ansible-doc -s setup # 查看参数,部分参数如下: filt ...

  10. uchome 全局变量

    $_SC: Array ( [dbhost] => localhost [dbuser] => root [dbpw] => root [dbcharset] => utf8 ...