题目大意:

输入样例个数,每个样例有两行,第一行是26个字母,分别代表a~z加密后的密文;第二行代表一串密文+明文,密文一定是完整的,但明文可能不完整,让你输出最短的(密文+明文);

基本思路:

拓展kmp,因为密文是完整的,所以它的长度必然是一半以上,所以把前一半转换成明文放到另一个数组里,然后后半部分原封不动的放到该数组里,然后拓展kmp,求一下next,然后从一半以后一直往后找,找到的话,就跳出,然后基本把把问题解决了;

代码如下:

#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; typedef long long ll;
const int inf = 0x3f3f3f3f;
const int maxn = 100000+10; int nx[maxn],ex[maxn];
char S[maxn],T[maxn];
char s1[maxn],a[27],b[27];
int lent,lens;
void getNext(){
nx[0]=lent;
int j=0;
while(j+1<lent&&T[j]==T[j+1]) j++;
nx[1]=j;
int k=1;
for(int i=2;i<lent;i++){
int p=k+nx[k]-1;
int l=nx[i-k];
if(i+l<p+1) nx[i]=l;
else{
j=max(0,p-i+1);
while(i+j<lent&&T[i+j]==T[j]) j++;
nx[i]=j;
k=i;
}
}
}
/*
void exkmp(){
int j=0;
while(j<lens&&j<lent&&S[j]==T[j]) j++;
ex[0]=j;
int k=0;
for(int i=1;i<lens;i++){
int p=k+nx[k]-1;
int l=nx[i-k];
if(l+i<p+1) ex[i]=-l;
else{
j=max(0,p-i+1);
while(i+j<lens&&j<lent&&S[i+j]==T[j]) j++;
ex[i]=j;
k=i;
}
}
}
*/
int main(){
int cas;
scanf("%d",&cas);
while(cas--){
scanf("%s%s",a,s1);
for(int i=0;i<26;i++) b[a[i]-'a']=i+'a';
int len=strlen(s1);
for(int i=0;i<(len+1)/2;i++) T[i]=b[s1[i]-'a'];
for(int k=(len+1)/2;k<=len;k++) T[k]=s1[k];
lent=strlen(T);
getNext();
int k;
for(k=(len+1)/2;k<len;k++){
if(nx[k]==len-k) break;
}
printf("%s",s1);
for(int i=len-k;i<k;i++) printf("%c",b[s1[i]-'a']);
printf("\n");
}
return 0;
}

  

hdu 4300 拓展kmp的更多相关文章

  1. HDU 6153 拓展KMP (2017CCPC)

    A Secret Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 256000/256000 K (Java/Others)Total ...

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

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

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

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

  4. HDU - 3613 Best Reward(manacher或拓展kmp)

    传送门:HDU - 3613 题意:给出26个字母的价值,然后给你一个字符串,把它分成两个字符串,字符串是回文串才算价值,求价值最大是多少. 题解:这个题可以用马拉车,也可以用拓展kmp. ①Mana ...

  5. hdu 4333"Revolving Digits"(KMP求字符串最小循环节+拓展KMP)

    传送门 题意: 此题意很好理解,便不在此赘述: 题解: 解题思路:KMP求字符串最小循环节+拓展KMP ①首先,根据KMP求字符串最小循环节的算法求出字符串s的最小循环节的长度,记为 k: ②根据拓展 ...

  6. HDU 3613 Best Reward(拓展KMP算法求解)

    题目链接: https://cn.vjudge.net/problem/HDU-3613 After an uphill battle, General Li won a great victory. ...

  7. Simpsons’ Hidden Talents HDU - 2594(拓展kmp)

    Sample Input clinton homer riemann marjorie Sample Output 0 rie 3 看输出才题意...拓展kmp特征很明显嘛....注意开始就匹配到尾的 ...

  8. HDU 3613 Best Reward ( 拓展KMP求回文串 || Manacher )

    题意 : 给个字符串S,要把S分成两段T1,T2,每个字母都有一个对应的价值,如果T1,T2是回文串,那么他们就会有一个价值,这个价值是这个串的所有字母价值之和,如果不是回文串,那么这串价值就为0.问 ...

  9. HDU 6153 A Secret ( KMP&&DP || 拓展KMP )

    题意 : 给出两个字符串,现在需要求一个和sum,考虑第二个字符串的所有后缀,每个后缀对于这个sum的贡献是这个后缀在第一个字符串出现的次数*后缀的长度,最后输出的答案应当是 sum % 1e9+7 ...

随机推荐

  1. mysql---级联更新和删除操作

    我们通常有这样的需求:删除表Table 1中记录,需要同时删除其它表中与Table 1有关的若干记录. 对于这种,我们有两种解决方法: 一,使用innodb表的外键约束 ALTER TABLE `sc ...

  2. Oracle varchar2或char类型的byte和char的区别

    那其中的BYTE和CHAR有什么区别呢 BYTE,用字节指定:VARCHAR2(10 BYTE).这能支持最多10字节的数据,在一个多字节字符集中,这可能只是两个字符.采用多字节字符集时,字节与字符并 ...

  3. python基础--逻辑运算

    #and or not#and 且 :两边都为真才是真#or 或:一个真就是真(一真为真)#ont 非:相反#优先级:1.not>and>or#同一优先级由左向右以此计算!#列子:prin ...

  4. Qt Unknown module(s) in QT: webengine

    到今天位置好像Qt 出到了5.10还是5.9.x吧,本身是用MSVC 5.7.0本身就有支持 webengine这个模块 然后跟风升级了5.9.1,公司项目不用qt框架了用VC渣渣6.0.....然后 ...

  5. php qq第三方登陆

    0.下载QQ登录(QQ互)php版:下载地址:点击打开链接(本文编写时最新版本:V2.1 ) 1.在QQ互联网站注册一个appid,配置网站地址和回调地址. 例:http://yzdd.app1101 ...

  6. bzoj 1876

    传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1876 二进制gcd 学到了(' '      ) 高精还得压位,最开始没写压位,然后调了1h ...

  7. Python每日一题 008

    题目 基于多线程的网络爬虫项目,爬取该站点http://www.tvtv.hk 的电视剧收视率排行榜 分析 robots.txt User-agent: Yisouspider Disallow: / ...

  8. LUOGU P4587 [FJOI2016]神秘数(主席树)

    传送门 解题思路 如果区间内没有\(1\),那么答案就为\(1\),从这一点继续归纳.如果区间内有\(x\)个\(1\),设区间内\([2,x+1]\)的和为\(sum\),如果\(sum=0\),那 ...

  9. 使用 nuxt+iview-admin+koa2 开发项目

    公司最近在做的一个项目,依然是采用熟悉的vue开发,数据平台因为其数据量大的特点,采用传统的spa模式,首页加载时间很长,而SSR这种方式对于首屏的加载时间优化显而易见,同时还可以方便的进行SEO.因 ...

  10. 原生Android项目里嵌入Cordova

    Android H5混合开发():原生Android项目里嵌入Cordova 如果安卓项目已经存在了,那么如何使用Cordova做混合开发? 方案1(适用于插件会持续增加或变化的项目): 新建Cord ...