很久很久以前,森林里住着一群兔子。

有一天,兔子们想要研究自己的 DNA 序列。

我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DNA 序列可能包含 26 个小写英文字母)。

然后我们每次选择两个区间,询问如果用两个区间里的 DNA 序列分别生产出来两只兔子,这两个兔子是否一模一样。

注意两个兔子一模一样只可能是他们的 DNA 序列一模一样。

输入格式

第一行输入一个 DNA 字符串 S。

第二行一个数字 m,表示 m 次询问。

接下来 m 行,每行四个数字 l1,r1,l2,r2l1,r1,l2,r2,分别表示此次询问的两个区间,注意字符串的位置从1开始编号。

输出格式

对于每次询问,输出一行表示结果。

如果两只兔子完全相同输出 Yes,否则输出 No(注意大小写)。

数据范围

1≤length(S),m≤10000001≤length(S),m≤1000000

输入样例:

aabbaabb
3
1 3 5 7
1 3 6 8
1 2 1 2

输出样例:

Yes
No
Yes
题意:让你判断两个区间的字符串是不是相等
思路:首先肯定不能暴力判断,说明我们查询的时候不能遍历字符串,肯定是O(1)~O(logn)里得出答案
判断字符串相等这个我们可以使用字符串哈希,算出所有前缀哈希值,然后推出其他区间子串的哈希值,我推出其他区间的时候是用了
快速幂算出,其实我们可以打出一个131的次方表,一般我们是化为131进制或者13331进制运算 哈希定理
 
#include<bits/stdc++.h>
#define maxn 1000005
#define mod 1000000007
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
char str[maxn];
ull dp[maxn];
ll l1,l2,r1,r2,n;
ll len;
void hash_code()
{
len=strlen(str+);
for(int i=;i<=len;i++){
dp[i]=dp[i-]*+str[i]-'a'+;
}
}
ull quick_pow(ull a,ull b){
ull ans=;
while(b){
if(b&) ans*=a;
a=a*a;
b=b/;
}
return ans;
}
int main(){
scanf("%s",str+);
scanf("%lld",&n);
hash_code();
for(int i=;i<n;i++){
scanf("%lld%lld%lld%lld",&l1,&r1,&l2,&r2);
ull m1,m2;
m1=quick_pow((ull),r1-l1+);
m2=quick_pow((ull),r2-l2+);
if(dp[r1]-dp[l1-]*m1==dp[r2]-dp[l2-]*m2){
printf("Yes\n");
}
else{
printf("No\n");
} }
}
												

AcWing 138. 兔子与兔子 hash打卡的更多相关文章

  1. CH1401 兔子与兔子【字符串】【HASH】

    1401 兔子与兔子 0x10「基本数据结构」例题 描述 很久很久以前,森林里住着一群兔子.有一天,兔子们想要研究自己的 DNA 序列.我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DN ...

  2. 兔子与兔子 [Hash]

    兔子与兔子 描述 很久很久以前,森林里住着一群兔子.有一天,兔子们想要研究自己的 DNA 序列.我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DNA 序列可能包含 26 个小写英文字母) ...

  3. while做法1.兔子生兔子 2.求100以内质数的和3.洗发水15元 牙膏5元 香皂2元 150元的算法

    1.兔子生兔子 2.求100以内质数的和 3.150块钱花完问题

  4. [RabbitMQ+Python入门经典] 兔子和兔子窝

    原文联接: http://blogs.digitar.com/jjww/2009/01/rabbits-and-warrens/ RabbitMQ作为一个工业级的消息队列服务器,在其客户端手册列表的P ...

  5. while:1.兔子生兔子问题 2.打印菱形 3.求100以内质数的和4.洗发水15元一瓶,牙膏5元一支,香皂2元一块,150元刚好花完

    1.兔子生兔子问题: 2.打印菱形 3.求100以内质数的和 4.洗发水15元一瓶,牙膏5元一支,香皂2元一块,150元刚好花完有多少种情况?

  6. for嵌套:1.兔子生兔子问题 2.打印菱形 3.求100以内质数的和

    1.兔子生兔子问题 方法一: 方法二: 2.打印菱形 3.求100以内质数的和

  7. 【RabbitMQ+Python入门经典】兔子和兔子窝 笔记

    RabbitMQ工业级的消息队列服务器. 兔子和兔子窝 动机来源:从生产环境的电子邮件处理流程当中分支出一个特定的离线分析流程. 解决方案1: 开始使用MySQL处理,将要处理的东西放在表里面,另一个 ...

  8. [转][RabbitMQ+Python入门经典] 兔子和兔子窝

    [转][RabbitMQ+Python入门经典] 兔子和兔子窝 http://blog.csdn.net/linvo/article/details/5750987 RabbitMQ作为一个工业级的消 ...

  9. Contest Hunter 1401 兔子与兔子

    1401 兔子与兔子 0x10「基本数据结构」例题 描述 很久很久以前,森林里住着一群兔子.有一天,兔子们想要研究自己的 DNA 序列.我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DN ...

随机推荐

  1. TableStore最佳实践:GEO索引打造店铺搜索系统

    摘要: 如何使用TableStore打造店铺搜索系统 一.方案背景 对于一套GEO管理系统,其核心点与瓶颈在于数据库的存储性能与查询能力:一方面,存储服务需要应对海量数据的低延迟存.读,另一方面,存储 ...

  2. Python--模块之time、random、os、hashlib

    今天开始模块. 首先补充 __init__.py       在python模块的每一个包中,都有一个__init__.py文件(这个文件定义了包的属性和方法)然后是一些模块文件和子目录,假如子目录中 ...

  3. hibernate 1 对1

    举例:部门departments   -------部门经理managers 映射 有两种方式 1:外键映射.类似于多对1.但是设置了unique唯一. 带外键的: package com.hiber ...

  4. Linux下github的使用

    在linux下搭建git环境 1.创建Github账号,https://github.com 2.Linux创建SSH密钥: ssh-keygen ##一直默认就可以了 3.将公钥加入到Github账 ...

  5. 微服务架构 技能图谱skill-map

    # 微服务架构 技能图谱 ## 理论基础### 概念#### 多微合适 - 非代码函数 - 非重写时间 - 适合团队最重要 - 独立业务属性 - 全功能团队 #### 进程隔离 - 服务运行在独立的进 ...

  6. hasvalue vs !=null

    Which is preferred: Nullable<T>.HasValue or Nullable<T> != null? The compiler replaces n ...

  7. java 11 已移除 javax.xml.bind

    @SneakyThrows public static <T> String convertToXml(T obj) { require(obj); JAXBContext jaxbCon ...

  8. js类型问题

    js比较数据一定要记得鉴别类型是否一致,number类型转换string 需要用到toString方法

  9. SPSS输出的结果都要写到文章中吗

    SPSS输出的结果都要写到文章中吗 经常有人问到,SPSS输出的结果都要写到文章中吗?文章中应该写什么呢?比如,均值.中位数.众数.标准差.百分位数.最小值.最大值等等,都要出现在文章中吗?洋洋洒洒那 ...

  10. Java泛型方法和构造函数

    可以在方法声明中定义类型参数,它们在方法的返回类型之前的尖括号中指定.包含泛型方法声明的类型不必是通用类型.可以在非静态方法声明中使用为泛型类型指定的类型参数. 示例 以下代码显示如何为方法m1()定 ...