正题

题目链接:https://www.luogu.com.cn/problem/U142342?contestId=37784


题目大意

一个字符串,定义两个字符串相似为用一些字母代替相同的字母后可以相同。

如urbbr=groorurbbr=groorurbbr=groor,apple≠abcdeapple\neq abcdeapple​=abcde

要求支持询问一个字符串的两个区间是否相似


解题思路

我们每个位置的hashhashhash值维护这个字母距离上一个与它相同的字母的距离,发现如果一个字母在这个区间里第一次出现,那么我们应该把它的hashhashhash值清000,所以我们可以直接枚举区间的第一个字母然后减去它的hashhashhash值即可。

时间复杂度O(26n)O(26n)O(26n)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ull unsigned long long
using namespace std;
const int N=2e5+10;
const ull p=1145141;
int n,m,last[26],nxt[N][26];char s[N];
ull pw[N],h[N],f[N];
int get(int l,int r){ull ans=h[r]-h[l-1]*pw[r-l+1];for(int i=0;i<26;i++){if(nxt[l][i]<0||l+nxt[l][i]>r)continue;ans=ans-f[l+nxt[l][i]]*pw[r-l-nxt[l][i]];}return ans;
}
int main()
{scanf("%d%d",&n,&m);scanf("%s",s+1);pw[0]=1;for(int i=1;i<=n;i++){int c=s[i]-'a';h[i]=h[i-1]*p+(f[i]=i-last[c]);pw[i]=pw[i-1]*p;last[c]=i;}memset(last,0,sizeof(last));for(int i=n;i>=1;i--){last[s[i]-'a']=i;for(int j=0;j<26;j++)nxt[i][j]=last[j]-i;}for(int i=1;i<=m;i++){int x,y,z;scanf("%d%d%d",&x,&y,&z);if(get(x,x+z-1)==get(y,y+z-1))printf("YES\n");else printf("NO\n");}
}

[2020.11.26NOIP模拟赛]询问【字符串hash】相关推荐

  1. [2020.11.26NOIP模拟赛]勇者的后缀【SA,RMQ,主席树,二分】

    正题 题目链接:https://www.luogu.com.cn/problem/U142356?contestId=37784 题目大意 一个字符串,询问给出(x,l,r)(x,l,r)(x,l,r ...

  2. [2020.11.27NOIP模拟赛]中位数之中位数【二分,树状数组】

    正题 题目链接:https://www.luogu.com.cn/problem/U142585?contestId=37855 题目大意 nnn个数,求所有区间中位数的中位数. 解题思路 二分一个答 ...

  3. [2020.11.25NOIP模拟赛]出租车【dp】

    正题 题面链接:https://www.luogu.com.cn/problem/U142298?contestId=37766 题目大意 nnn个人有起点和终点,按顺序上车,但下车可以任意顺序,车最 ...

  4. [2020.11.3NOIP模拟赛]选数字【容斥】

    正题 题目链接:https://www.luogu.com.cn/problem/U138404?contestId=36493 题目大意 nnn个数字,每次询问一个区间有多少个三对数或为xxx. 解 ...

  5. [2020.11.27NOIP模拟赛]拼图王【dp】

    正题 题面链接:https://www.luogu.com.cn/problem/U142584 题目大意 nnn个010101串,按顺序分成两个序列,然后拼接成一个序列(拼接串x,yx,yx,y的话 ...

  6. [2020.11.25NOIP模拟赛]下棋【dp】

    正题 题目链接:https://www.luogu.com.cn/problem/U142297?contestId=37766 题目大意 nnn个白棋mmm个黑棋排成一排,要求没有任何一段黑白棋的个 ...

  7. [2020.11.4NOIP模拟赛]简单的打击【NTT】

    正题 题目链接:https://www.luogu.com.cn/problem/U138580 题目大意 两个长度为nnn的序列,要求重排后同位置的相加后众数的个数最多. 解题思路 定义aia_ia ...

  8. 2017.6.11 校内模拟赛

    题面及数据及std(有本人的也有原来的) :2017.6.11 校内模拟赛 T1 自己在纸上模拟一下后就会发现 可以用栈来搞一搞事情 受了上次zsq 讲的双栈排序的启发.. 具体就是将原盘子大小cop ...

  9. 9.11 myl模拟赛

    9.11 myl 模拟赛 100 + 100 + 0 第一题耗费了太多的时间,导致最后一题没有时间想,直接去写了暴力,而且出题人没有给暴力分.... Problem 1. superman [题目描述 ...

最新文章

  1. 惊了,老板要我开发一个工作流引擎!
  2. 马斯克要办大学上了热搜
  3. 去掉word注释里的横线
  4. C# 之 6.0 新特性
  5. iOS 第三方登录之 QQ登录
  6. System V IPC之共享内存
  7. xfce 双击窗口标题栏无法最大化解决办法
  8. fedora安装pyenv实现python的版本管理
  9. Resharper进阶一:简要介绍
  10. 十年厚积!Arm Neoverse 重磅推出 V1 和 N2平台,加速基础设施转型
  11. springboot 解决put,delete方法获取不到参数问题
  12. yaw公式_横摆角速度(Yaw Rate)估算(上)
  13. 修改文件类型(txt文件改为bat、sh文件)
  14. 计算机联锁控制台功能,计算机联锁控制台的改进及应用
  15. 爱普生(EPSON) ME300 问题解决
  16. 单片机原理及接口技术(C51微课第3版)张毅刚课后习题答案
  17. 2000-XP-2003操作系统常见问题
  18. 开机、重启和用户登录注销
  19. 2017年世界科技11大进展
  20. msm8909 关于能否分别控制充电电流和USB输出电流问题 (温度问题)

热门文章

  1. 华为服务器参数配置文件,最实用的华为配置基础手册.doc
  2. docker 修改阿里镜像源_Jetson Nano 修改源镜像
  3. Mysql实现幂等_阿里面试官:接口的幂等性怎么设计?
  4. levedb 导入 mysql_LevelDB-初始篇
  5. mysql pmod项目_内置函数 - 数学函数 - 《Apache Doris 文档(201812)》 - 书栈网 · BookStack...
  6. expsky.php,Typecho漏洞利用工具首发,半分钟完成渗透
  7. 飞机游戏项目完整代码(详解JAVA300集)
  8. #10010 「一本通 1.1 练习 6」糖果传递 (数学+贪心)
  9. mysql查询语句能否让一个字段不显示出来_天天写order by,你知道Mysql底层如何执行吗?
  10. AtCoder Regular Contest 063 E - Integers on a Tree 构造 + 二分图染色