Clairewd’s message ekmp
给两个串第一个串是翻译表(密文可以通过翻译表翻译成明文),第二个串是由密文+明文组成,前面是密文(完整的),后面是明文(未必完整),问能不能把第二个串补全,输出最短的一种可能。
一开始 用的string 和每次更新字符进行getnext
妥妥的 超时 kmp最好不要用string 速度太慢了
参考了 kuangbin的做法:
以s为原串做一次扩展KMP,得到extend数组,extend[i]表示原串以第i开始与模式串的前缀的最长匹配。经过O(n)的枚举,我们可以得到,若extend[i]+i=len且i>=extend[i]时,表示stringB即为该点之前的串,stringA即为该点之前的str串,最后输出即可。
就是原串和翻译后的串进行一次ekmp 然后进行判断输出即可
#include<bits/stdc++.h>
using namespace std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m)
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define LL long long
#define REP(i,N) for(int i=0;i<(N);i++)
#define CLR(A,v) memset(A,v,sizeof A)
//////////////////////////////////
#define inf 0x3f3f3f3f
#define N 100000+50
int nex[N];
int extend[N];
char p[N];
char s[N];
char table[N];
map<char,char>mp;
void EKMP(char s[],char t[])//s[]为主串,t[]为模式串
{
int i,j,p,l;
int len=strlen(t);
int len1=strlen(s);
memset(nex,,sizeof(nex));
memset(extend,,sizeof(extend));
nex[]=len;
j=;
while(j+<len&&t[j]==t[+j])j++;
nex[]=j;
int a=;
for(int i=;i<len;i++)
{
p=nex[a]+a-;
l=nex[i-a];
if(i+l<p+)nex[i]=l;
else
{
j=max(,p-i+);
while(i+j<len&&t[i+j]==t[+j])j++;
nex[i]=j;
a=i;
}
}
j=;
while(j<len1&&j<len&&s[j]==t[j])j++;
extend[]=j;
a=;
for(i=;i<len1;i++)
{
p=extend[a]+a-;
l=nex[i-a];
if(l+i<p+)nex[i]=l;
else
{
j=max(,p-i+);
while(i+j<len1&&j<len&&s[i+j]==t[j])j++;
extend[i]=j;
a=i;
}
}
} int main()
{
int cas;
RI(cas);
while(cas--)
{
RS(table);
RS(s);
rep(i,,)
mp[table[i]]='a'+i;
int len=strlen(s);
rep(i,,len-)
p[i]=mp[ s[i] ];
EKMP(s,p);
int k;
for(k=(len+)/;k<len;k++)
{
if(extend[k]+k>=len)//+k 意为当前坐标之前有几个字母 直接为k即可
break;
}
rep(i,,k-)
printf("%c",s[i]);
rep(i,,k-)
printf("%c",mp[s[i]]);
cout<<endl;
}
return ;
}
Clairewd’s message ekmp的更多相关文章
- hdu------(4300)Clairewd’s message(kmp)
Clairewd’s message Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- hdu 4300 Clairewd’s message KMP应用
Clairewd’s message 题意:先一个转换表S,表示第i个拉丁字母转换为s[i],即a -> s[1];(a为明文,s[i]为密文).之后给你一串长度为n<= 100000的前 ...
- HDU-4300 Clairewd’s message
http://acm.hdu.edu.cn/showproblem.php?pid=4300 很难懂题意.... Clairewd’s message Time Limit: 2000/1000 MS ...
- hdu4300 Clairewd’s message【next数组应用】
Clairewd’s message Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- (KMP 扩展)Clairewd’s message -- hdu -- 4300
http://acm.hdu.edu.cn/showproblem.php?pid=4300 Clairewd’s message Time Limit: 2000/1000 MS (Java/Oth ...
- hdu4300 Clairewd’s message
地址:http://acm.hdu.edu.cn/showproblem.php?pid=4300 题目: Clairewd’s message Time Limit: 2000/1000 MS (J ...
- hdu 4300 Clairewd’s message 字符串哈希
Clairewd’s message Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- hdu4300 Clairewd’s message 扩展KMP
Clairewd is a member of FBI. After several years concealing in BUPT, she intercepted some important ...
- Clairewd’s message
Problem Description Clairewd is a member of FBI. After several years concealing in BUPT, she interce ...
随机推荐
- 安装snap及snap常安装软件
文章链接:https://blog.csdn.net/laomd/article/details/80710451 一.snap简介 什么是snap,snap是一种全新的软件包管理方式,它类似一个容器 ...
- VBS计时器2
打开计时器,如果点击暂停,会显示你刚才事物所用的时间(以分钟为单位) dim c //控制循环 c= vbyes while c<>vbno dim a a= 60*hour(now)+m ...
- 使用FreeRTOS进行性能和运行时分析
在MCU on Eclipse网站上看到Erich Styger在2月25日发的博文,一篇关于使用FreeRTOS进行性能和运行分析的文章,本人觉得很有启发,特将其翻译过来以备参考.当然限于个人水平, ...
- Confluence 6 CSS 编辑快速入门
希望编辑空间的 CSS 样式表: 进入空间后,然后从边栏的底部选择 空间工具(Space tools) > 外观和感觉(Look and Feel) . 然后选择 样式表(Stylesheet) ...
- Confluence 6 站点高级自定义
你可以继续编辑的全局布局文件来继续更新你的主面板.请查看 Customizing the Confluence Dashboard 页面来获得更多有关的信息.你需要具有一些基本的Velocity 知识 ...
- numpy:dot与multiply
http://blog.csdn.net/iamzhangzhuping/article/details/52370241
- 【linux】安装python依赖库confluent_kafka
想跑https://github.com/ghaughian/mongo-kafka-spark/blob/master/src/pub.py这个程序,发现没有confluent_kafka库 1.p ...
- 使用 declare 语句和strict_types 声明来启用严格模式:
使用 declare 语句和strict_types 声明来启用严格模式: Caution: 启用严格模式同时也会影响返回值类型声明. Note: 严格类型适用于在启用严格模式的文件内的函数调用,而不 ...
- laravel 兜底路由
在 Laravel 5.6 中,引入了兜底路由功能.所谓兜底路由,就是当路由文件中定义的所有路由都无法匹配用户请求的 URL 时,用来处理用户请求的路由,在此之前,Laravel 都会通过异常处理器为 ...
- 论文阅读笔记十九:PIXEL DECONVOLUTIONAL NETWORKS(CVPR2017)
论文源址:https://arxiv.org/abs/1705.06820 tensorflow(github): https://github.com/HongyangGao/PixelDCN 基于 ...