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 ...
随机推荐
- echo和重定向
命令: echo 作用: echo有重复的意思,会在终端中显示参数指定的文字,通常会和重定向联合使用 使用: echo 文字内容 例子: 在终端中显示hello echo hello 命令: > ...
- centos7编译安装lnmp
1.前言 本文适合于已经对Linux操作系统具有基本操作经验,并且能够在Linux或Windows上通过一键搭建工具或者yum命令行进行环境搭建的读者,阅读本文需具有一定的专业知识,本文不建议初学者阅 ...
- Mave------pom.xml标签详解
pom文件作为MAVEN中重要的配置文件,对于它的配置是相当重要.文件中包含了开发者需遵循的规则.缺陷管理系统.组织.licenses.项目信息.项目依赖性等.下面将重点介绍一下该文件的基本组成与功能 ...
- 虚拟机时间同步14 Aug 04:09:18 ntpdate[2941]: no server suitable for synchronization found
因为虚拟机经常挂起,所以需要时间同步 [root@slave1 /root]$ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime cp: over ...
- 体验go语言的风骚式编程
最近想搞搞后台开发,话说注意力就转移到了公司用的golang.用Go做微服务比较方便,或许是因为golang强悍的语法吧,看到go的语法,自己已被深深的吸引.关于学习后台如何选择可以参考<做后台 ...
- Confluence 6 MySQL 输入你的数据库细节
Confluence 的安装向导将会指导你一步一步的在 Confluence 中配置安装 MySQL 数据库. 使用 JDBC 连接(默认) JDBC 是推荐的连接你的 Confluence 到数据库 ...
- JPA整合Spring案例
目录 Spring-SpringMVC-JPA整合案例 三种整合方式 Spring整合JPA步骤 解决JPA懒加载问题 Spring-SpringMVC-JPA整合案例 author :SimpleW ...
- java----java工具类
System: Runtime: Random: Scanner: Arrays: MessageFormat: Math: 日期: Comparable: cloneable接口: 数字处理: MD ...
- CF 1051F
题意:给定一张n个点,m条边的无向联通图,其中m-n<=20,共q次询问,每次询问求给定两点u,v间的最短路长度 第一眼看见这题的时候,以为有什么神奇的全图最短路算法,满心欢喜的去翻了题解,发现 ...
- Happiness
1575: Happiness 时间限制: 1 Sec 内存限制: 1280 MB 题目描述 Chicken brother is very happy today, because he atta ...