字符串hash唯一用途是快速判断两字符串是否相等,但存在极小概率假阳性(本来不相等,但算法返回相等)。

根本思想是把一个字符串转换为一个整数,要求相同的字符串,对应的这个整数相同,不同的字符串,对应的这个整数不同。

#include<bits/stdc++.h>
#define BASE 2
#define MOD 1000000007
#define LL long long
#define MAXN 300005
using namespace std;
int hash[MAXN];
char s[MAXN];
int qpow(int base,int n){
LL ans=;
while(n){
if(n&)ans=(ans*base)%MOD;
base=(1LL*base*base)%MOD;
n>>=;
}
return ans;
}
int hash_ask(int l,int r){
if(l==)return hash[r];
else{
int ans=(1LL*hash[r]-hash[l-]+MOD)%MOD;
int rev=qpow(BASE,l);
rev=qpow(rev,MOD-);
ans=1LL*ans*rev%MOD;
return ans;
}
}
int hash_init(int len){
hash[]=s[];
for(int i=;i<len;i++){
hash[i]=(0LL+hash[i-]+s[i]*qpow(BASE,i)%MOD)%MOD;
}
} int main(){
scanf("%s",s);
hash_init(strlen(s));
while(){
int l,r;
scanf("%d %d",&l,&r);
printf("%d\n",hash_ask(l,r));
}
}

最新文章

  1. React学习笔记。
  2. Ajax中POST和GET的区别
  3. CentOS_PHP_NGINX_FastCGI
  4. 比对工具之 BWA 使用方法
  5. jsp页面变量作用域问题
  6. RequireJS入门指导 (转)
  7. 项目源码--IOS自定义视频播放器
  8. 前端必会的js知识总结整理
  9. asp.net弹出框后页面走样
  10. win 10应用商店下载应用错误码0x80070422
  11. 在VC6中使用ogre进行游戏开发
  12. codeforces 632F. Magic Matrix
  13. Solr commit 策略测试
  14. javaweb后台转码
  15. canvas小球
  16. Java框架spring Boot学习笔记(九):一个简单的RESTful API
  17. django-admin和manage.py
  18. supervisor来自动化部署,集成git
  19. C#面向对象(继承)
  20. C++Builder 网站。记住学习

热门文章

  1. 6374. 【NOIP2019模拟2019.10.04】结界[生与死的境界]
  2. [HCTF 2018]WarmUp
  3. 【JVM】符号引用和直接引用
  4. DNS稳定保障系列1--服务双保障“辅助DNS”产品介绍
  5. 【2017中国大学生程序设计竞赛 - 网络选拔赛】Friend-Graph
  6. 【dart学习】-- Dart之函数
  7. 离线+生成树+并查集——cf1213G
  8. 服务器安装TeamViewer 13
  9. 通过adb命令查看SN、CID码等信息
  10. 24. Jmeter GUI 及NON GUI实现分布式