HDU4300-Clairewd’s message-KMP
来源:互联网 发布:hadoop 数据存储 编辑:程序博客网 时间:2024/04/29 20:01
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4300
题目意思真的很难读懂;
题意:给定两组字符串,第一组只有26个字符表对应明文中a,b,c,d....z可以转换第一个,第二个...第26个字符变成密文,
第二组字符串是给定的密文+明文,明文可能不完整(缺失或没有),叫你补完且整个密文+明文是最短的
如果有多种明文则取最大的明文。
解题思路就是将前一半一定是密文的字符装换成明文,然后+后面的字符,从后往前匹配,匹配小于等于长度一半的最长前缀;
#include<map>#include<iostream>#include<cstdio>#include<cmath>#include<stack>#include<cstring>#include<set>#include<vector>#include<algorithm>#define LL long long#define inf 1<<30#define s(a) scanf("%d",&a)#define CL(a,b) memset(a,b,sizeof(a))using namespace std;const int N=200005;int n,m;char a[N],b[N];char num[N];char c[N];int nnext[N];void get_nnext(char *a,int len){ int j=-1,i=0; nnext[0]=-1; while(i<len){ if(j == -1 || a[i] == a[j]) nnext[++i]=++j; else j=nnext[j]; }}int main(){ int t; cin>>t; while(t--){ cin>>a>>b; int len=strlen(b),k=len; for(int i=0;i<26;i++) num[a[i]-'a']='a'+i; for(int i=0;i<(len+1)/2;i++) c[i]=num[b[i]-'a']; // 将前一部分转换成密文; for(int i=(len+1)/2;i<=len;i++) c[i]=b[i]; // 拼接后一部分明文; get_nnext(c,len); while(nnext[k]>len/2) k=nnext[k]; // 从后往前匹配;寻找长度小于len的最长前缀; cout<<b; for(int i=nnext[k];i<len-nnext[k];i++) cout<<num[b[i]-'a']; // 输出还不够的字符串;需要注意点的是这里输出的解密的字符,而不能直接用c[i]; cout<<endl; } return 0;}
0 0
- 【KMP】 hdu4300 Clairewd’s message
- HDU4300-Clairewd’s message-KMP
- HDU4300 Clairewd’s message 暴力/KMP算法
- hdu4300 Clairewd’s message(扩展KMP)
- hdu4300 Clairewd’s message 扩展KMP
- HDU4300 Clairewd’s message 扩展kmp
- hdu4300 Clairewd’s message(KMP)
- HDU4300 Clairewd’s message(扩展KMP)
- HDU4300:Clairewd’s message
- hdu4300---Clairewd’s message
- hdu4300 Clairewd’s message
- HDU4300 Clairewd’s message
- HDU4300-Clairewd’s message(KMP前缀匹配后缀)
- HDU4300 Clairewd’s message(扩展KMP,后缀匹配前缀)
- hdu4300 Clairewd’s message (字符串hash)
- Clairewd’s message +KMP
- Clairewd’s message (KMP)
- HDU_4300 Clairewd’s message(KMP)
- bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊 (LCT)
- 数据挖掘基础知识-矩阵(分解)
- 46 个非常有用的 PHP 代码片段
- CSDN公开课:SCRUM敏捷开发(2015-8-19 免费)
- 一张图看明白android 接口回调机制
- HDU4300-Clairewd’s message-KMP
- SQL用法大全
- mysql导入导出数据的好方法
- F - Stone-----(2015 summer training #11)
- MySQL在Win2008下如何设置双主热备
- C++的struct和union
- PHP数据类型转换的一些坑
- 关于Beta分布、二项分布与Dirichlet分布、多项分布的关系
- ACdream1007 a+b 快速幂求和