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

思路:我们把字符串当做全是密文然后解密成明文,这样前面密文部分就是完整的明文,后面明文部分就乱码了,要求最短密文+明文就是求最短的密文,就是求原串和解密后的串的最大公共前缀,所以用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. outline的兼容性及使用限制

    outline 和 border的区别: outline不占据文档空间,border占据文档空间. outline无法单独设置上下左右,只要设置outline,必须所有的边都设置:border可以设置 ...

  2. 【BZOJ2300】[HAOI2011]防线修建 set维护凸包

    [BZOJ2300][HAOI2011]防线修建 Description 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可 ...

  3. redis数据持久化(快照/日志):

    1.RDB快照的配置选项: save // 900内,有1条写入,则产生快照 save // 如果300秒内有1000次写入,则产生快照 save // 如果60秒内有10000次写入,则产生快照 ( ...

  4. OC开发_Storyboard——UITableView

    一.tableView 1.datasource数据源 (1 构造每一个tableVIewCell的方法:cellForRowAtIndexPath,这里的 dequeueReusableCellWi ...

  5. LCA在线算法(hdu2586)

    hdu2586 How far away ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  6. 并查集+路径压缩(poj1988)

    http://poj.org/problem?id=1988 Cube Stacking Time Limit: 2000MS   Memory Limit: 30000K Total Submiss ...

  7. spring 配置中相关属性的含义:

    1:parent元素属性 一个bean定义可能会包含大量的配置信息,包括容器相关的信息(比如初始化方法,静态工厂方法等等)以及构造函数参数和属性的值.一个child bean定义是一个能够从paren ...

  8. javascript飞机大战-----004创建子弹对象

    /* 创建子弹:因为子弹不是只创建一个所以要用构造函数 注意一点:子弹发射的位置应该是英雄机的正中央的位置,所以需要传点东西进来 */ function Bullet(l,t){ this.l = l ...

  9. easyui 下对radio的选中操作

    在easyui框架下对radio 基本和没有用其的情况差不多,但是给radio赋值时不一样,不能用attr这个了,要用prop 我测试了一下 在谷歌 火狐和ie下都可以.

  10. Python使用logging来记录日志

    #encoding:utf-8 import logging.config from logging.handlers import RotatingFileHandler import Config ...