Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 376 Solved: 75
[Submit][Status][Web Board]

Description

很久很久以前,森林里住着一群兔子。
有一天,兔子们想要研究自己的DNA序列。
我们首先选取一个好长好长的DNA序列(小兔子是外星生物,DNA序列可能包含26个小写英文字母)。
然后我们每次选择两个区间,询问如果用两个区间里的DNA序列分别生产出来两只兔子,这两个兔子是否一模一样。
注意两个兔子一模一样只可能是他们的DNA序列一模一样。

Input

第一行输入一个DNA字符串S。
第二行一个数字m,表示m次询问。
接下来m行,每行四个数字l1,r1,l2,r2,分别表示此次询问的两个区间,注意字符串的位置从1开始编号。
数据范围
1≤length(S),m≤1000000

Output

对于每次询问,输出一行表示结果。
如果两只兔子完全相同输出Yes,否则输出No(注意大小写)。

Sample Input

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

Sample Output

Yes
No
Yes

HINT

[Submit][Status]

双hash+快读,双hash是预防精心构造的数据的。

代码:

#include<bits/stdc++.h>
using namespace std;
int mod1=998244,base1=233,n,T,ll=1;
char s[1000001];
int mod2=666623,base2=431;
long long h2[1000001],P2[1000001],h1[1000001],P1[1000001];
void read(int &x) {char ch;bool ok;for(ok=0,ch=getchar();!isdigit(ch);ch=getchar())if(ch=='-') ok=1;for(x=0;isdigit(ch);x=x*10+ch-'0',ch=getchar());if(ok) x=-x;
}
void build1()
{for(int i=1;i<=n;i++)h1[i]=ll*h1[i-1]*base1%mod1+s[i]-'a';P1[0]=1;for(int i=1;i<=n;i++)P1[i]=ll*P1[i-1]*base1%mod1;
}
bool check1(int l1,int r1,int l2,int r2)
{int len=r1-l1+1;int h11=((h1[r1]-ll*h1[l1-1]*P1[len]%mod1)+mod1)%mod1;int h12=((h1[r2]-ll*h1[l2-1]*P1[len]%mod1)+mod1)%mod1;return  h11==h12;
}
void build2()
{for(int i=1;i<=n;i++)h2[i]=ll*h2[i-1]*base2%mod2+s[i]-'a';P2[0]=1;for(int i=1;i<=n;i++)P2[i]=ll*P2[i-1]*base2%mod2;
}
bool check2(int l1,int r1,int l2,int r2)
{int len=r1-l1+1;int h21=((h2[r1]-ll*h2[l1-1]*P2[len]%mod2)+mod2)%mod2;int h22=((h2[r2]-ll*h2[l2-1]*P2[len]%mod2)+mod2)%mod2;return  h21==h22;
}
int main(){scanf("%s",s+1);n=strlen(s+1);build1();build2();read(T);while(T--){int l1,r1,l2,r2;read(l1);read(r1);read(l2);read(r2);if(r1-l1+1!=r2-l2+1)puts("No");elseputs((check1(l1,r1,l2,r2)&&check2(l1,r1,l2,r2))?"Yes":"No");}return 0;
}

【hash】兔子与兔子(C++)相关推荐

  1. 兔子与兔子 [Hash]

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

  2. 兔子与兔子(BKDRhash)

    兔子与兔子 时间限制: 1 Sec  内存限制: 128 MB 题目描述 很久很久以前,森林里住着一群兔子.有一天,兔子们想要研究自己的 DNA 序列.我们首先选取一个好长好长的 DNA 序列(小兔子 ...

  3. 数据结构总结1(火车进栈/兔子与兔子/括号画家/Editor/邻值查找/最大子序和/前缀统计/Phone List/The XOR Largest Pair)

    问题 A: 火车进栈 题目描述 这里有n列火车将要进站再出站-- 但是,每列火车只有1节-那就是车头-- 描述 有n列火车按1到n的顺序从东方左转进站,这个车站是南北方向的,它虽然无限长,只可惜是一个 ...

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

    RabbitMQ作为一个工业级的消息队列服务器,在其客户端手册列表的Python段当中推荐了一篇blog,作为RabbitMQ+Python的入门手册再合适不过了.不过,正如其标题Rabbit and ...

  5. php狼和兔子算法,PHP基于递归算法解决兔子生兔子问题php技巧

    这篇文章主要介绍了PHP基于递归算法解决兔子生兔子问题,结合实例形式分析了兔子生兔子问题的php面试题采用循环与递归两种思路的解决方法,需要的朋友可以参考下 本文实例讲述了PHP基于递归算法解决兔子生 ...

  6. python兔子_python 实现兔子生兔子示例

    如下所示: # -*- coding: utf-8 -*- # 简述:话说有一对可爱的兔子,出生后的第三个月开始,每一月都会生一对小兔子. # 当小兔子长到第三个月后,也会每个月再生一对小小兔子. # ...

  7. 一只兔子每三个月生兔子JAVA,兔子生兔子问题

    关于兔子生兔子的算法详解 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔 子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 分析: 第1个月  --  1对 第2 ...

  8. 兔子问题 php,PHP基于递归算法解决兔子生兔子问题php技巧

    这篇文章主要介绍了PHP基于递归算法解决兔子生兔子问题,结合实例形式分析了兔子生兔子问题的php面试题采用循环与递归两种思路的解决方法,需要的朋友可以参考下 本文实例讲述了PHP基于递归算法解决兔子生 ...

  9. python兔子编程_Python兔子生兔子算法,编程练习题实例十一

    Python兔子生兔子算法,编程练习题实例十一 Python兔子生兔子算法,编程练习题实例十一 没学习python之前就听说过一个兔子生兔子的数学算法问题.现在学习了python编程后,自然要用pyt ...

  10. java 兔子生兔子

    标题 兔子生兔子 问题描述 假设一对兔子的成熟期是一个月,即一个月可长成成兔,那么,如果每对成兔每个月都生一对小兔,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子开始繁殖,以后每个月会有多少对 ...

最新文章

  1. @RestController和@Controller注解的区别
  2. input框输入完回车即可查询事件
  3. 装上后这 14 个插件后,PyCharm 能飞起
  4. EMR StarRocks 极速数据湖分析原理解析
  5. Android 面试 缓存,荐【经典面试题】七大缓存经典问题...
  6. python零基础好学吗-如何从零开始学习Python,零基础学python难吗
  7. 西门子plm_西门子PLM组件之形状搜索(支持工业软件国产自主可控)
  8. Atitit sumdoc ta index list atiitt 2008 diary 大事记v2 s222.docx Atiti. 2010---2016大事记 just world new
  9. 锐捷 重启计算机,提示“重启计算机后才能使用锐捷客户端”常用解决方法
  10. 朱丹超级搜索术笔记:百度搜索相关的技巧
  11. UE4实时渲染需要注意的点——RTR(Real Time Rendering)
  12. laypage分页java例子_总结laypage.js分页插件用法
  13. 相见恨晚的一款前端布局神器!
  14. 区块链入门系列之P2P
  15. matlab自带滤波器,matlab自带滤波器函数小结(图像处理)
  16. OverLeaf(LaTeX在线编辑器)使用简介
  17. 定制Android关机界面
  18. ESP32入门之程序烧录:烧录错误总结
  19. 虚拟机启动network服务启动失败:ob for network.service failed because the control process exited with error code
  20. 毕业设计——基于小程序云开发的校园二手交易平台(附源码)

热门文章

  1. Visio 2016 和 SharePoint Designer 2013 来创建工作流并将其发布到 SharePoint 2016 网站而无需任何代码
  2. 认证疑难问题分析报告
  3. 使用Matlab绘制星座图
  4. html2canvas生成长图片时导致背景图渲染不全问题
  5. python中setup是什么意思_python中setuptools指的是什么
  6. vue-iview异步加载渲染树
  7. 六、Rewrite重写
  8. linux 扫描wifi软件,ubuntu用shell命令wpa_cli工具连接wifi
  9. CSS3中设置动画播放时间
  10. MyEclipse优化、常用设置、快捷键