include

include

using namespace std;

typedef unsigned long long ULL;

char str[N]; //存放字符串

int h[N], p[N]; //h[]存放前缀和,p[]存放倍数

ULL get(int l, int r){

return h[r] - h[l - 1] * p[r - l + 1];

}

int main(){

int n, m;

int l1, r1, l2, r2;

scanf("%d%d", &n, &m);

p[0] = 1; //个位倍数

for(int i = 1;i <= n; i++){

h[i] = h[i - 1] * P + str[i];

p[i] = p[i - 1] * P;

}

while(m --){

scanf("%d%d%d%d", &l1, &r1, &l2, &r2);

if(get(l1, r1) == get(l2, r2)) puts("Yes");

else puts("No");

}

return 0;

}





核心思想:字符串映射为特征值(前缀和)后取模,每个字符串对应不同的数字以区分字符串是否相同

关键步骤:(1)前缀和求法:字符串从左到右,从高位到低位,h[i] = h[i - 1] * P + str[i];

A B C D h[4]

A B C h[3]

A B h[2]

A h[1]

(2)部分和求法:利用前缀和求部分和 h[r] - h[l - 1] * p[l - r + 1];

注意的地方:字符串每一位不能对应 0 ,ascall码 \0 对应 0, 可以避免

p[0] == 1;

p[1] == 1 * 131;

p[2] == 1 * 131 *131;

p[3] == 1 * 131 *131 *131;

……

移除后取模

ULL 对应2 ^ 64

AcWing 841. 字符串哈希 2022/5/25的更多相关文章

  1. AcWing 841. 字符串哈希

    //快速判断两次字符串是不是相等 #include<bits/stdc++.h> using namespace std ; typedef unsigned long long ULL; ...

  2. 841. 字符串哈希(hash)

    给定一个长度为n的字符串,再给定m个询问,每个询问包含四个整数l1,r1,l2,r2l1,r1,l2,r2,请你判断[l1,r1l1,r1]和[l2,r2l2,r2]这两个区间所包含的字符串子串是否完 ...

  3. PAT 甲级 1047 Student List for Course (25 分)(cout超时,string scanf printf注意点,字符串哈希反哈希)

    1047 Student List for Course (25 分)   Zhejiang University has 40,000 students and provides 2,500 cou ...

  4. PAT 甲级 1039 Course List for Student (25 分)(字符串哈希,优先队列,没想到是哈希)*

    1039 Course List for Student (25 分)   Zhejiang University has 40000 students and provides 2500 cours ...

  5. 【基本算法入门-字符串哈希(Hash)】-C++

    字符串哈希入门 说得通俗一点,字符串哈希实质上就是把每个不同的字符串转成不同的整数. 为什么会有这样的需要呢?很明显,存储一个超长的字符串和存储一个超大但是能存的下的整数,后者所占的空间会少的多,但主 ...

  6. 牛客练习赛33 E tokitsukaze and Similar String (字符串哈希hash)

    链接:https://ac.nowcoder.com/acm/contest/308/E 来源:牛客网 tokitsukaze and Similar String 时间限制:C/C++ 2秒,其他语 ...

  7. HDU 1880 魔咒词典(字符串哈希)

    题目链接 Problem Description 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一 ...

  8. 洛谷P3370 【模板】字符串哈希

    P3370 [模板]字符串哈希 143通过 483提交 题目提供者HansBug 标签 难度普及- 提交  讨论  题解 最新讨论 看不出来,这题哪里是哈希了- 题目描述 如题,给定N个字符串(第i个 ...

  9. HDU2594 Simpsons’ Hidden Talents 字符串哈希

    最近在学习字符串的知识,在字符串上我跟大一的时候是没什么区别的,所以恶补了很多基础的算法,今天补了一下字符串哈希,看的是大一新生的课件学的,以前觉得字符串哈希无非就是跟普通的哈希没什么区别,倒也没觉得 ...

  10. LA 6047 Perfect Matching 字符串哈希

    一开始我用的Trie+计数,但是不是计多了就是计少了,后来暴力暴过去的…… 看了别人的代码知道是字符串哈希,但是仍有几个地方不理解: 1.26^500溢出问题 2.没考虑哈希碰撞? 跪求指点! #in ...

随机推荐

  1. GitLab CI-CD 学习笔记

    概述 1. CI/CD CI(持续集成)指开发人员一天内进行多次合并和提交代码操作,并通过自动化测试,完成构建 CD(持续部署)指每次代码更改都会自动部署到对应环境 CI/CD 结合在一起,可以加快开 ...

  2. FineUI通过js事件条用后台方法实现弹窗

    一.html标签的onclick事件 <button type="button" class="btnUpdate" onclick="< ...

  3. .net core 读取配置文件的几种方式

    一.Json配置文件 1.这里的配置文件指的是下图 2.json配置文件示例 { "Logging": { "LogLevel": { "Defaul ...

  4. JZOJ 1073. 【GDOI2005】山海经

    \(\text{Solution}\) 非常经典的求区间最大字段和 不难想到线段树,考虑处理区间答案的合并 维护前缀后缀最大和与区间答案,合并考虑跨中点贡献即可 代码打得非常恶心... \(\text ...

  5. LG P3803 【模板】多项式乘法

    \(\text{FFT}\) 模板 #include <cstdio> #include <iostream> #include <cmath> #define r ...

  6. 手机访问wamp及wampserver64设置开放权限后局域网无法连接

    服务器配置:在手机上WampServer电脑端网页的效果! 1.本地虚拟主机下的 Apache 目录中的bin 目录中的 config 配置文件 http.config文件使用代码编辑器. 2.将ht ...

  7. HACLABS: NO_NAME

    HACLABS: NO_NAME 目录 HACLABS: NO_NAME 1 信息收集 1.1 端口扫描 1.2 后台目录扫描 1.2.1 目录分析 2 命令注入利用 2.1 尝试反弹Shell 2. ...

  8. CSS 数学函数与容器查询实现不定宽文本溢出跑马灯效果

    在许久之前,曾经写过这样一篇文章 -- 不定宽溢出文本适配滚动.我们实现了这样一种效果: 文本内容不超过容器宽度,正常展示 文本内容超过容器的情况,内容可以进行跑马灯来回滚动展示 像是这样: 但是,之 ...

  9. 原生javascript解锁恶心的CSDN强制关注才能阅读让文章自动展开(转部分内容)

    此时你可以打开chrome浏览器的开发者工具 快捷键F12, 然后切换到Console界面 然后复制上面的javascript代码 var article_content=document.getEl ...

  10. 问题集锦 ~ MySQL

    # 在存储过程中,变量赋值失败 declare parent text; select parent into Parent where id = 1; select Parent; 查询的字段不能和 ...