题目大意:

给定字符串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. .net core 部署到IIS 以及上 HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure

    安装AspNetCoreModule托管模块后执行 1.net stop was /y 2.net start w3svc 测试可以,但是需要装对应的托管模块的版本. 1. .NET Core与Win ...

  2. 从FreeBSD里面看到的网络协议列表,感觉可以保存一下

    # # Internet protocols # # $FreeBSD$ # from: @(#)protocols 5.1 (Berkeley) 4/17/89 # # See also http: ...

  3. 想实现网页滚动一定距离底部弹出div

    <script type="text/javascript"> $(window).scroll(function () { if ($(this).scrollTop ...

  4. python使用logging模块实现日志写入

    python实现的logging写入日志的功能.logging模块还是挺好用的 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018 ...

  5. (原)centos 防火墙开放端口命令

    centos 防火墙默认是关闭非系统端口的,所以用到非系统端口首先开放,命令如下 firewall-cmd --zone=public --add-port=1935/tcp --permanent ...

  6. Bootstrap 网页1

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  7. 割边的tarjan算法

    与割点唯一一点不同是low[v]>=dfn[u]变为low[v]>dfn[u] 代码如下: bool vis[maxn]; int dfn[maxn],low[maxn]; int cnt ...

  8. Java实现按汉语拼音的排序

    public class sortByPinyin { public static void main(String[] args) { String[] arr = { "刘刘" ...

  9. vs code常用插件(python)

    1.chinese 作用:vscode设置为中文. 使用方法:Ctrl+Shift+P:输入 "config":选择zh 2.python 作用:调试 3.autoDocstrin ...

  10. 饿了么监控系统 EMonitor 与美团点评 CAT 的对比

    背景介绍 饿了么监控系统EMonitor:是一款服务于饿了么所有技术部门的一站式监控系统,覆盖了系统监控.容器监控.网络监控.中间件监控.业务监控.接入层监控以及前端监控的数据存储与查询.每日处理总数 ...