Clairewd's message /// 字符串hash
题目大意:
给定字符串s 是26个字母对应的密文字母
给定字符串c1 是 密文+部分原文
原文可能缺损 要求将原文补全输出
利用s得到密文字母对应的原字母rs
利用rs翻译c1得到 原文+部分密文c2
由于密文肯定是完整的 此时
c1 完整密文+部分原文
c2 完整原文+部分密文
将两个字符串hash 若一段字符相等则对应段的hash值也相等
枚举原文的长度 就可以得到在c1中原文的开始位置len
则此时假设 c1中 n-len+1~n 为原文 则c2中1~len为原文
若此时这两段字符的hash值相等 则假设成立
#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define ULL unsigned long long
#define INF 0x3f3f3f3f
#define mem(i,j) memset(i,j,sizeof(i))
#define inc(i,l,r) for(int i=l;i<=r;i++)
#define dec(i,r,l) for(int i=r;i>=l;i--)
#define gcd(i,j) __gcd(i,j);
const int maxn=1e5+;
const int mod=1e9+;
const double eps=1e-; typedef unsigned long long ull;
struct hash_table{
ull seed=;
ull Hash[maxn],temp[maxn];
void work(char *s,int n){
temp[]=; Hash[]=;
for(int i=;i<=n;i++)temp[i]=temp[i-]*seed;
for(int i=;i<=n;i++)Hash[i]=(Hash[i-]*seed+(s[i]-'a'));
}
ull get(int l,int r){
return Hash[r]-Hash[l-]*temp[r-l+];
}
}h1, h2; char c1[maxn],c2[maxn];
char s[],rs[]; int main()
{
int _; scanf("%d",&_);
while(_--) {
scanf("%s%s",s,c1+);
inc(i,,-) rs[s[i]-'a']=i+'a';
int n=strlen(c1+);
inc(i,,n) c2[i]=rs[c1[i]-'a'];
h1.work(c1,n); h2.work(c2,n);
// h1对应的 c1是完整密文+部分原文
// h2对应的 c2是完整原文+部分密文
int ans=n;
inc(i,n,n*-) { // 枚举整串的长度
if(i&) continue; // 奇数长度跳过
int mid=i/; // 得到此时密文的长度
int len=n-mid; // 再得到部分原文的长度
ULL s1=h1.get(n-len+,n); // 部分原文的密文
ULL s2=h2.get(,len); // 部分原文
if(s1==s2) { ans=mid; break; }
// 若两个区间hash值相同 说明两段字符相同
}
inc(i,,ans) printf("%c",c1[i]);
inc(i,,ans) printf("%c",c2[i]);
printf("\n");
} return ;
}
Clairewd's message /// 字符串hash的更多相关文章
- hdu 4300 Clairewd’s message 字符串哈希
Clairewd’s message Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 字符串hash + 二分答案 - 求最长公共子串 --- poj 2774
Long Long Message Problem's Link:http://poj.org/problem?id=2774 Mean: 求两个字符串的最长公共子串的长度. analyse: 前面在 ...
- 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的前 ...
- hdu4300 Clairewd’s message【next数组应用】
Clairewd’s message Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- [知识点]字符串Hash
1.前言 字符串的几大主要算法都多少提及过,现在来讲讲一个称不上什么算法, 但是非常常用的东西——字符串Hash. 2.Hash的概念 Hash更详细的概念不多说了,它的作用在于能够对复杂的状态进行简 ...
- 【BZOJ-3555】企鹅QQ 字符串Hash
3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1545 Solved: 593[Submit][Statu ...
- POJ 1200 字符串HASH
题目链接:http://poj.org/problem?id=1200 题意:给定一个字符串,字符串只有NC个不同的字符,问这个字符串所有长度为N的子串有多少个不相同. 思路:字符串HASH,因为只有 ...
- LA4671 K-neighbor substrings(FFT + 字符串Hash)
题目 Source http://acm.hust.edu.cn/vjudge/problem/19225 Description The Hamming distance between two s ...
随机推荐
- windows 如何配置 Go 环境(Zip archive 方式)?
windows 如何配置 Go 环境(Zip archive 方式)? 下载地址:https://dl.google.com/go/go1.12.5.windows-amd64.zip 解压 go1. ...
- RabbitMq--4--集群(转载)
RabbitMQ消息服务用户手册 1 基础知识 1.1 集群总体概述 Rabbitmq Broker集群是多个erlang节点的逻辑组,每个节点运行Rabbitmq应用,他们之间共享用户.虚拟主机.队 ...
- elasticsearch 关联单词查询以及Shingles
Shingle Token Filter A token filter of type shingle that constructs shingles (token n-grams) from a ...
- Shell02---变量
Shell02---变量 1. shell变量概述 1. 什么是变量 变量是Shell传递数据的一种方法,简单理解:用一个固定的字符串去表示不固定的内容,便于后续引用. 2.变量命令规范 变量定义时名 ...
- jQuery实现网页放大镜功能 转载
京东等电商网站中可以对商品进行放大观察,本文要实现的就是模仿这个放大镜功能,大致效果如下图所示: 简要说明实现思路: 1.原图窗口与放大窗口插入的是同一个图片,不过原图窗口的图片要适当缩小,放大窗口图 ...
- python 环境准备-centos7
python3环境搭建[本身centosyum底层也是py2.x实现的,装3.x的时候要实现多版本共存这里解决了这些问题] 安装编译环境# yum -y groupinstall 'Developme ...
- mac 安装Navicat_Premium 破解版带汉化
因为近期要用mongodb,本想着下载一个Navicat for mongodb 但是一直没有给力带帖子,所以就靠着百度自己找,功夫不负有心人. 下面附上百度网盘,里面有一个txt文档,在安装前一定要 ...
- AcWing 243. 一个简单的整数问题2 (树状数组)打卡
题目:https://www.acwing.com/problem/content/244/ 题意:区间加,区间查询 思路:我们把原先那个差分数组分解一下 ∑i=1x∑j=1ib[j]=∑i=1x(x ...
- [CSP-S模拟测试]:抛硬币(DP)
题目背景 小$A$和小$B$是一对好朋友,他们经常一起愉快的玩耍.最近小$B$沉迷于**师手游,天天刷本,根本无心搞学习.但是小$B$已经入坑了几个月,却一次都没有抽到$SSR$,让他非常怀疑人生.勤 ...
- python中API接口是什么
首先还是举个例子:你要去银行取钱的例子.如果没有银行柜员给你服务,你自己去存钱,你需要做的事情有: 一,打开金库的大门 二,把钱放进去 三,记账,存放了多少钱 四,离开. 问题解决了,但是其中有不少问 ...