【哈希】兔子与兔子

题目描述

很久很久以前,森林里住着一群兔子。有一天,兔子们想要研究自己的 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
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define ld long double
using namespace std;
const int maxn=1e6+1;
ll hashh[maxn],p[maxn];
char s[maxn];
int l1,l2,r1,r2;
int n,len,q;
int main()
{
    scanf("%s",s+1);
    len=strlen(s+1);
    scanf("%d",&q);
    p[0]=1;
    for(int i=1;i<=len;i++)
    {
        hashh[i]=hashh[i-1]*103+(s[i]-‘a‘+1);
        p[i]=p[i-1]*103;
    }
    for(int i=0;i<q;i++)
    {
        scanf("%d %d %d %d",&l1,&r1,&l2,&r2);
        if(hashh[r1]-hashh[l1-1]*p[r1-l1+1]==hashh[r2]-hashh[l2-1]*p[r2-l2+1])
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}

原文地址:https://www.cnblogs.com/Diliiiii/p/9525999.html

时间: 2024-10-07 18:42:28

【哈希】兔子与兔子的相关文章

兔子生兔子函数递归

namespace 兔子生兔子函数递归{    class Program    {        static void Main(string[] args)        {            Console.WriteLine("请输入你想知道兔子哪个月的数量:");            int m = Convert.ToInt32(Console.ReadLine());            int sum = new Program().tuzi(m);  //定

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

http://blog.csdn.net/linvo/article/details/5750987 RabbitMQ作为一个工业级的消息队列服务器,在其客户端手册列表的Python段当中推荐了一篇blog,作为RabbitMQ+Python的入门手册再合适不过了.不过,正如其标题Rabbit and Warrens(兔 子和养兔场)一样,这篇英文写的相当俏皮,以至于对于我等非英文读者来说不像一般的技术文档那么好懂,所以,翻译一下吧.翻译过了,希望其他人可以少用一 些时间.翻译水平有限,不可能像

5.16 兔子生兔子,日期时间练习

namespace ConsoleApplication8 { class Program { static void Main(string[] args) { #region // //有一对幼兔,幼兔一个月后长成小兔,小兔一个月后长成成兔.并生下一对幼兔, //// 问几年后,有多少对幼兔,多少对小兔,多少对成兔,兔子总数是多少? // // 成兔每月生一对幼兔. // Console.WriteLine("请输入月份"); // int MM = int.Parse(Conso

算法:兔子生兔子

古典问题:有一只大兔子,大兔子每个月生一只小兔子,第二个月小兔子会长成大兔子,假如兔子都不死,问第N个月的兔子总数为多少? 解法一.循环 1 public long sumRubbit1(int n){ 2 long total = 0; //兔子总数 3 int big = 1; //大兔子总数 4 int middle = 0; //中兔子总数 5 int little = 0; //小兔子总数 6 if(n==1){ 7 total = big; 8 }else if(n==2){ 9 l

兔子生兔子问题

一对兔子,从出生后的第3个月起每个月都生1对,小兔子长到第3个月后每个月又生1对兔子,假如兔子都不死,某个月的兔子总数是多少分析:每个月兔子总数1,1,2,3,5,8,13,21,34,55... n1=1;//第一个月n2=1;//第二个月 n1=n1+n2;//第三个月 n2=n1+n2;//第四个月 f(n):第n个月 兔子总量 f(n)=f(n-1)+f(n-2) f(5)=f(4)+f(3) f(4):3 f(3):2 f(2):1 f(1):1 <script> function

题四:一对兔子生兔子,给个月份算有几只兔子

这个用递归就行,兔子就是个类,他们有自己的行为,这种思路可以帮助我们给兔子建立模型. 写法一: /** * 有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月又生一对兔子,假如兔子都不死,问每个月的兔子总数多少? */ public class Test4 { public static void main(String[] args) { RabbitPair rabbitPair = new RabbitPair(6); System.out.println(rabbitP

兔子与兔子(字符串Hash)

目录 描述 输入格式 输出格式 样例输入 样例输出 Solution Code 描述 很久很久以前,森林里住着一群兔子.有一天,兔子们想要研究自己的 DNA 序列.我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DNA 序列可能包含 26 个小写英文字母),然后我们每次选择两个区间,询问如果用两个区间里的 DNA 序列分别生产出来两只兔子,这两个兔子是否一模一样.注意两个兔子一模一样只可能是他们的 DNA 序列一模一样. 输入格式 第一行一个 DNA 字符串 S. 接下来一个数字 m

AcWing:138. 兔子与兔子(Hash)

很久很久以前,森林里住着一群兔子. 有一天,兔子们想要研究自己的 DNA 序列. 我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DNA 序列可能包含 26 个小写英文字母). 然后我们每次选择两个区间,询问如果用两个区间里的 DNA 序列分别生产出来两只兔子,这两个兔子是否一模一样. 注意两个兔子一模一样只可能是他们的 DNA 序列一模一样. 输入格式 第一行输入一个 DNA 字符串 S. 第二行一个数字 m,表示 m 次询问. 接下来 m 行,每行四个数字 l1,r1,l2,r2

兔子生兔子问题(斐波那契数列)

一道经典的算法问题. 题目:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子.假如兔子都不死,要求输出一年内兔子的数量是多少. 1 1 2 3 5 8…… 代码如下: //兔子问题(斐波那契) package com.hxzy.homework; public class HomeWork05 {     public static void main(String[] args) {         // TODO Auto-generated meth