兔子与兔子

描述

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

输入格式

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

输出格式

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

样例输入

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

样例输出

Yes
No
Yes

题解

又是一道字符串hash模板题
对于题目所给的字符串,我们可以先预处理出每一位的hash值与每一位的权值
处理每一位的权值是为了通过四则运算使用类似与在一个hash值后直接补0的方式\(O(1)\)地求出另一个hash值
对于每一个询问我们可以运用前缀和的思想比较子串的hash值是否相等
注意:感觉这道题好像用long long 取模不行会WA,最后我用的unsigned long long 自然溢出,亲测

#include<bits/stdc++.h>
#define in(i) (i=read())
using namespace std;
typedef unsigned long long lol;
const lol base=131,mod=1e9+7;
lol read() {lol ans=0,f=1; char i=getchar();while(i<'0' || i>'9') {if(i=='-') f=-1; i=getchar();}while(i>='0' && i<='9') {ans=(ans<<1)+(ans<<3)+i-'0'; i=getchar();}return ans*f;
}
lol n,m;
char s[1000010];
lol h[1000010],sum[1000010];
int main()
{scanf("%s",s+1); in(m);n=strlen(s+1); sum[0]=1;for(int i=1;i<=n;i++) {h[i]=h[i-1]*base+(s[i]-'a'+1);sum[i]=sum[i-1]*base;}while(m--) {int l1,r1,l2,r2;in(l1); in(r1); in(l2); in(r2);if(h[r1]-h[l1-1]*sum[r1-l1+1]==h[r2]-h[l2-1]*sum[r2-l2+1])puts("Yes");else puts("No");}return 0;
}

博主蒟蒻,随意转载.但必须附上原文链接

http://www.cnblogs.com/real-l/

转载于:https://www.cnblogs.com/real-l/p/9362467.html

兔子与兔子 [Hash]相关推荐

  1. 兔子与兔子(BKDRhash)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. java 兔子生兔子

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

最新文章

  1. WebService大讲堂之Axis2(1):用POJO实现0配置的WebService
  2. 《C++标准程序库》笔记之二
  3. Centos 开机后,登录时无法输入密码怎么解决
  4. 客户端到服务器的请求响应时间,客户端到服务器的网络响应时间
  5. java nlpir_4-NLPIR汉语分词系统-JAVA
  6. [Linux C]递归遍历指定目录下的子目录和文件
  7. Android的屏幕适配之图片加载适配
  8. Spring的注解形式:@Repository、@Service、@Controller
  9. 第 9 章 适配器设计模式
  10. vue回调函数this指向问题
  11. Atitit 项目沟通管理 艾提拉总结 目录 1. 项目中沟通对象 2 1.1. 主要为项目干系人 产品部门 运营部门组员等 2 1.2. 适当越级沟通, 与高层直接沟通 3 2. 沟通频率 3
  12. 算法合集之《信息学中守恒法的应用》
  13. 技术可行性分析和经济可行性分析
  14. 音乐专业如何利用计算机思维,太神奇了!带学生“玩音乐”居然可以打开思维创新...
  15. Linux Mint 19 Tara x86_64安装Docker-ce
  16. 教你制作在线签名 【电驴技巧,转verycd】
  17. 巧用接口解耦分离实现
  18. 计算机系统盘突然爆满,电脑c盘突然爆满是怎么个情况_电脑c盘和d盘的区别
  19. mycat 分表分库
  20. 加州洛杉矶计算机研究生,加州洛杉矶计算机硕士文书要求

热门文章

  1. 沉睡者IT - [短视频运营] 抖音短视频成SEO新风口
  2. D4-Android绘图之和我一起画箭头
  3. 一名Web3D开发工程师的Three.js知识总结与学习步骤
  4. 2022 年 50 个最酷的网络和移动项目创意(一)
  5. [转载]对文件流进行操作
  6. mysql 启用myisam_MySQL各存储引擎(INNODB,MyISAM等)的区别及其启动方法
  7. 年终购物季,不得不看的营销”血拼“策略
  8. 项目经理一年能挣多少钱?本文带你了解一下
  9. java maven项目更改项目名字
  10. python查看变量内存地址的内置函数是_查看变量内存地址的Python内置函数是____...