正题


题目大意

一个句子有多个单词。
给出了一个加密了的串。加密方法是将不同的单词转换成不同的单词。然后再给一个加密前的串,求再加密串中可能出现的最早位置。


解题思路

设aia_iai​表示与iii相同的前一个字母的位置。
然后根据题目意思对与两个串如果aaa序列一样那么就是可以转换的加密串。所以我们可以用字符串hashhashhash进行匹配。


codecodecode

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#define ll long long
using namespace std;
const ll XJQ=1000000007;
const ll HZB=10007;
const ll p1=9999991;
const ll p2=1000007;
const ll N=1000001;
ll hash1[N],hash2[N],a[N],b[N];
ll len1,len,s,ans;
char c[N];
map<ll,ll> f;
void pre_work(){hash1[0]=hash2[0]=1;for(ll i=1;i<N;i++){hash1[i]=hash1[i-1]*p1%XJQ;hash2[i]=hash2[i-1]*p2%XJQ;}
}
ll work_in(){ll len,s=0,s1=0;len=strlen(c);for(ll i=0;i<len;i++){s=(s*26+c[i]-'a')%XJQ;s1=(s1*26+c[i]-'a')%HZB;}return s+s1*XJQ;
}
void init(){scanf(" %s",c);while(c[0]!='$'){ll x=work_in();a[++len1]=f[x];b[a[len1]]=len1;f[x]=len1;scanf(" %s",c);}scanf(" %s",c);f.clear();while(c[0]!='$'){ll x=work_in();ll z=f[x];++len;s=(s*p2)%XJQ;if(z)(s+=hash1[len-z])%=XJQ;f[x]=len;scanf(" %s",c);}
}
void work(){for(ll i=1;i<=len;i++){ans=(ans*p2)%XJQ;if(a[i])(ans+=hash1[i-a[i]])%=XJQ;}if(ans==s){printf("1");return;}ll l=0;for(ll i=len+1;i<=len1;i++){l++;if(b[l]&&b[l]<i)(ans-=hash1[b[l]-l]*hash2[i-b[l]-1]%XJQ-XJQ)%=XJQ;ans=(ans*p2)%XJQ;if(a[i]&&a[i]>l)(ans+=hash1[i-a[i]])%=XJQ;if(l==29767)l++,l--;if(ans==s){printf("%lld",l+1);return;}}printf("0");
}
int main()
{freopen("data.in","r",stdin);pre_work();init();work();
}

jzoj3189-解密【字符串hash】相关推荐

  1. php字符串加密解密源码,PHP中加密解密字符串函数源代码

    PHP中加密解密字符串函数源代码: /** *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */ function passport_encrypt($str,$key){ / ...

  2. C#开发中关于加密解密字符串的使用方法

    C#开发中关于加密解密字符串的使用方法 C#加密解密字符串方法 首先在web.config | app.config 文件下增加如下代码: <?xml version="1.0&quo ...

  3. hdu4821 字符串hash

    参考博客:点击打开链接 字符串hash典例. 这里用的是bkdrhash 法.也是最常用的冲突最少的一种.原理:把字符串和数值对应.这里用base=31(一般用质数), 先是扫一遍,处理处每个位子到结 ...

  4. hdu4821 字符串hash(有多少(M*L长的,M个不相同)子串))

    题意这英语..反正我是读不懂== 题意:给定一个串,有多少M*L的子串,其中子串的M个子串不相同= (注:某一位不相同即为不相同) 很明显要On的扫,但是似乎前一个与后一个没有关系?是的,前第x个(x ...

  5. 字符串Hash的原理与应用

    字符串Hash无论是在ACM竞赛中还是在工程中都有着广泛的应用,所以很有必要掌握好它的用法.主要分为两个部 分:Hash映射和冲突处理.而本文主要来详细讲解Hash映射的方法及应用,下篇文章将会介绍如 ...

  6. 字符串hash(二)

    从上一届已经讲了字符串hash的方法,hash后怎么用也很重要 文章目录 一.查询子串的hash值 查询子串减去期中一个字符后的hash值 查询两个子串拼接的hash值 **hash的模板(自然溢出) ...

  7. 字符串hash(一)

    很久没遇到过hash的题了,今天来重新温故一下 文章目录 序言 常用的几个字符串hash方法: hash公式(自然溢出) 讲解 模板 单hash 讲解 模板 双hash 讲解 代码 总结 序言 你有没 ...

  8. nssl1211-好文章【字符串hash,map】

    正题 题目大意 求长度为n个一个字符串长度为m不同的子串个数 解题思路 用字符串hash判断字符串是否相同,然后时间复杂度O(n2)O(n^2)O(n2),然后我们因为自然溢出所以不能开桶,那就开ma ...

  9. nssl1192-加密【字符串hash】

    正题 题目大意 对于每个字母都有一个加密后的字母对应. 然后给一段字母其中包括密文和密文对应的原文的一部分(也有可能没有原文),求一段最短的密文加原文. 解题思路 枚举密文和原文分界处.然后用字符串h ...

  10. UVA4671 K-neighbor substrings FFT+字符串hash

    题解: 将字符串A.B中的a和b分别以1和-1表示,对字符串B进行反转. 将A和B看成多项式,求卷积,这样的话从结果区间的[lenB−1,lenA)[lenB−1,lenA)[lenB-1,lenA) ...

最新文章

  1. 单张GPU搞定GPT-3超参数!先训练小模型,再“一键迁移” | 已开源
  2. SCCM2012R2之二安装SQL Server
  3. python数据框新建一个列并赋值_pandas.DataFrame 根据条件新建列并赋值的方法
  4. boost::sort模块实现spreadsort 键和数据排序示例
  5. java webservice用户验证_使用java webservice的.net4.0 web app需要Usernametoken身份验证
  6. ETL异构数据源Datax_工具部署_02
  7. python内置函数 enumerate()的用法
  8. layUI固定列重复
  9. 并行程序调试、测试与模型检测
  10. Scala:数据类型和变量
  11. 【嵌入式】基于SPI的M8266WIFI模块调试
  12. 技嘉主板开机自动进入bios怎么解决?
  13. Python,requests爬虫,使用代理爬取大众点评(含爬取结果。。。在文末)
  14. 全媒体运营师胡耀文教你:社群运营这6种裂变模型,你掌握了吗?
  15. 打印机一直不停打乱码的解决方法
  16. [实验吧刷题]密码学部分
  17. java 搞笑翻译_超级搞笑的英文翻译图文版!笑死我了
  18. Python入门(2)
  19. Oulipo(欧力波)(经典kmp模板题) HDU-1686
  20. 如何讲述个人职业生涯

热门文章

  1. 索尼服务器维护时间,索尼云服务器
  2. android textview动态设置,android – 如何动态设置文本到TextView?
  3. sql倒序排列取第一条_从零学会SQL·三——汇总分析
  4. java的正则表达式 CPU_小心踩雷!一个小小的正则表达式竟把CPU拖垮......
  5. sql不等于0怎么表示_数组真的只能从0开始吗?python表示不同意
  6. 后端学习 - 计算机网络
  7. 7-1 输出全排列 (20 分)(全排列+递归+图解)Come Baby
  8. [JS-BOM]BOM_History历史记录对象
  9. [JavaWeb-JavaScript]JavaScript概念与功能
  10. [蓝桥杯2017决赛]图书排列-next_permutation枚举