题目大意:

给定字符串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的更多相关文章

  1. hdu 4300 Clairewd’s message 字符串哈希

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

  2. 字符串hash + 二分答案 - 求最长公共子串 --- poj 2774

    Long Long Message Problem's Link:http://poj.org/problem?id=2774 Mean: 求两个字符串的最长公共子串的长度. analyse: 前面在 ...

  3. hdu------(4300)Clairewd’s message(kmp)

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

  4. hdu 4300 Clairewd’s message KMP应用

    Clairewd’s message 题意:先一个转换表S,表示第i个拉丁字母转换为s[i],即a -> s[1];(a为明文,s[i]为密文).之后给你一串长度为n<= 100000的前 ...

  5. hdu4300 Clairewd’s message【next数组应用】

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

  6. [知识点]字符串Hash

    1.前言 字符串的几大主要算法都多少提及过,现在来讲讲一个称不上什么算法, 但是非常常用的东西——字符串Hash. 2.Hash的概念 Hash更详细的概念不多说了,它的作用在于能够对复杂的状态进行简 ...

  7. 【BZOJ-3555】企鹅QQ 字符串Hash

    3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1545  Solved: 593[Submit][Statu ...

  8. POJ 1200 字符串HASH

    题目链接:http://poj.org/problem?id=1200 题意:给定一个字符串,字符串只有NC个不同的字符,问这个字符串所有长度为N的子串有多少个不相同. 思路:字符串HASH,因为只有 ...

  9. LA4671 K-neighbor substrings(FFT + 字符串Hash)

    题目 Source http://acm.hust.edu.cn/vjudge/problem/19225 Description The Hamming distance between two s ...

随机推荐

  1. windows 如何配置 Go 环境(Zip archive 方式)?

    windows 如何配置 Go 环境(Zip archive 方式)? 下载地址:https://dl.google.com/go/go1.12.5.windows-amd64.zip 解压 go1. ...

  2. RabbitMq--4--集群(转载)

    RabbitMQ消息服务用户手册 1 基础知识 1.1 集群总体概述 Rabbitmq Broker集群是多个erlang节点的逻辑组,每个节点运行Rabbitmq应用,他们之间共享用户.虚拟主机.队 ...

  3. elasticsearch 关联单词查询以及Shingles

    Shingle Token Filter A token filter of type shingle that constructs shingles (token n-grams) from a ...

  4. Shell02---变量

    Shell02---变量 1. shell变量概述 1. 什么是变量 变量是Shell传递数据的一种方法,简单理解:用一个固定的字符串去表示不固定的内容,便于后续引用. 2.变量命令规范 变量定义时名 ...

  5. jQuery实现网页放大镜功能 转载

    京东等电商网站中可以对商品进行放大观察,本文要实现的就是模仿这个放大镜功能,大致效果如下图所示: 简要说明实现思路: 1.原图窗口与放大窗口插入的是同一个图片,不过原图窗口的图片要适当缩小,放大窗口图 ...

  6. python 环境准备-centos7

    python3环境搭建[本身centosyum底层也是py2.x实现的,装3.x的时候要实现多版本共存这里解决了这些问题] 安装编译环境# yum -y groupinstall 'Developme ...

  7. mac 安装Navicat_Premium 破解版带汉化

    因为近期要用mongodb,本想着下载一个Navicat for mongodb 但是一直没有给力带帖子,所以就靠着百度自己找,功夫不负有心人. 下面附上百度网盘,里面有一个txt文档,在安装前一定要 ...

  8. AcWing 243. 一个简单的整数问题2 (树状数组)打卡

    题目:https://www.acwing.com/problem/content/244/ 题意:区间加,区间查询 思路:我们把原先那个差分数组分解一下 ∑i=1x∑j=1ib[j]=∑i=1x(x ...

  9. [CSP-S模拟测试]:抛硬币(DP)

    题目背景 小$A$和小$B$是一对好朋友,他们经常一起愉快的玩耍.最近小$B$沉迷于**师手游,天天刷本,根本无心搞学习.但是小$B$已经入坑了几个月,却一次都没有抽到$SSR$,让他非常怀疑人生.勤 ...

  10. python中API接口是什么

    首先还是举个例子:你要去银行取钱的例子.如果没有银行柜员给你服务,你自己去存钱,你需要做的事情有: 一,打开金库的大门 二,把钱放进去 三,记账,存放了多少钱 四,离开. 问题解决了,但是其中有不少问 ...