HDU - 4300

题意:这个题目好难读懂,,先给你一个字母的转换表,然后给你一个字符串密文+明文,密文一定是全的,但明文不一定是全的,求最短的密文和解密后的明文;

题解:由于密文一定是全的,所以他的长度一定大于整个字符串的一半。将这一半先解密,然后和后缀对比一下,求最长的公共前缀。那么就转换为了拓展kmp问题。

 1 #include<bits/stdc++.h>
2 using namespace std;
3
4 const int maxn=100010; //字符串长度最大值
5 int nt[maxn],ex[maxn]; //ex数组即为extend数组
6 char a[maxn],b[maxn],c[maxn];
7 map<char,char> mp;
8
9 //预处理计算next数组
10 void GETNEXT(char *str)
11 {
12 int i=0,j,po,len=strlen(str);
13 nt[0]=len; //初始化nt[0]
14 while(str[i]==str[i+1]&&i+1<len) i++; //计算nt[1]
15 nt[1]=i;
16 po=1; //初始化po的位置
17 for(i=2;i<len;i++){
18 if(nt[i-po]+i<nt[po]+po) nt[i]=nt[i-po]; //第一种情况,可以直接得到nt[i]的值
19 else{ //第二种情况,要继续匹配才能得到nt[i]的值
20 j=nt[po]+po-i;
21 if(j<0) j=0; //如果i>po+nt[po],则要从头开始匹配
22 while(i+j<len&&str[j]==str[j+i]) j++; //计算nt[i]
23 nt[i]=j;
24 po=i; //更新po的位置
25 }
26 }
27 }
28
29 //计算extend数组
30 void EXKMP(char *s1,char *s2)
31 {
32 int i=0,j,po,len=strlen(s1),l2=strlen(s2);
33 GETNEXT(s2); //计算子串的next数组
34 while(s1[i]==s2[i]&&i<l2&&i<len) i++; //计算ex[0]
35 ex[0]=i;
36 po=0; //初始化po的位置
37 for(i=1;i<len;i++){
38 if(nt[i-po]+i<ex[po]+po) ex[i]=nt[i-po]; //第一种情况,直接可以得到ex[i]的值
39 else{ //第二种情况,要继续匹配才能得到ex[i]的值
40 j=ex[po]+po-i;
41 if(j<0) j=0; //如果i>ex[po]+po则要从头开始匹配
42 while(i+j<len&&j<l2&&s1[j+i]==s2[j]) j++; //计算ex[i]
43 ex[i]=j;
44 po=i; //更新po的位置
45 }
46 }
47 }
48
49 int main()
50 {
51 int t;
52 cin>>t;
53 while(t--){
54 cin>>a>>b;
55 int len1=strlen(a);
56 int len2=strlen(b);
57 for(int i=0;i<len1;i++)
58 mp[a[i]]='a'+i;
59 for(int i=0;i<len2;i++)
60 c[i]=mp[b[i]];
61 c[len2]=0;
62 EXKMP(b,c);
63 int k;
64 for(k=0;k<len2;k++)
65 if(k+ex[k]>=len2&&k>=ex[k]) break;
66 for(int i=0;i<k;i++) cout<<b[i];
67 for(int i=0;i<k;i++) cout<<mp[b[i]];
68 cout<<endl;
69 }
70 return 0;
71 }

HDU - 4300 Clairewd’s message (拓展kmp)的更多相关文章

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

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

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

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

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

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

  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 字符串哈希

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

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

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

  7. HDU 4300 Clairewd’s message(KMP+思维)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4300 题目大意:题目大意就是给以一段字符xxxxzzz前面x部分是密文z部分是明文,但是我们不知道是从 ...

  8. HDU 4300 Clairewd’s message(扩展KMP)

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

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

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

随机推荐

  1. Head First 设计模式 —— 09. 模版方法 (Template Method) 模式

    模板方法模式 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. P289 特点 主导算法框架,并且保护这个算法 P28 ...

  2. 【win10】win10下两个显示器不同桌面壁纸

    win10系统下,双屏显示为不同的桌面壁纸 操作: 1.鼠标右键点击个性化 2.点击背景选项 3.在图片上右键选择要添加为背景的图片 同理,将另一个屏幕壁纸设为监视器1 最后效果为两个分屏为不同桌面壁 ...

  3. 【Oracle】查询执行慢的sql

    查询执行最慢的sql select * from (select sa.SQL_TEXT, sa.SQL_FULLTEXT, sa.EXECUTIONS "执行次数", round ...

  4. git创建分支并关联远程分支

    1.新建本地分支: 如图,再输入你的分支名字,然后选择从哪个远程分支拉代码,如选择master 至此本地分支创建完成. 2.关联远程分支: (1).先输入git branch -vv,看看分支与远程分 ...

  5. 2.4V升3.3V,2.4V升3V,1A大电流升压芯片

    两节镍氢电池串联就是1.2V+1.2V=2.4V的供电电压了,2.4V升3V, 2.4V升3.3V的话,就能稳压稳定给模块供电了,镍氢电池是会随着使用的电池电量减少的话,电池的电压也是跟着变化的,导致 ...

  6. 日常分享:关于时间复杂度和空间复杂度的一些优化心得分享(C#)

    前言 今天分享一下日常工作中遇到的性能问题和解决方案,比较零碎,后续会持续更新(运行环境为.net core 3.1) 本次分享的案例都是由实际生产而来,经过简化后作为举例 Part 1(作为简单数据 ...

  7. 三十三:WEB漏洞-逻辑越权之水平垂直越权

    水平和垂直越权 水平越权:可以获得同级别用户权限 垂直权限:享受高几个层次的用户权限 解释,原理,检测,利用,防御 通过更换的某个ID之类的身份标识,从而使得A账号获取(修改,删除)B账号的数据,通过 ...

  8. Maven 基础详解

    一.编写pom.xml文件     Maven项目的核心是pom.xml.POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等等. ...

  9. map 传递给函数的代价

    https://github.com/unknwon/the-way-to-go_ZH_CN/blob/master/eBook/08.1.md map 传递给函数的代价很小:在 32 位机器上占 4 ...

  10. Spring框架入门浅析

    一.Spring Bean的配置 在需要被Spring框架创建对象的实体类的类声明前面加注解:```@component```.这样在Spring扫描的时候,看到该注解就会在容器中创建该实体类的对象. ...