[2020.11.26NOIP模拟赛]询问【字符串hash】
正题
题目链接: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】相关推荐
- [2020.11.26NOIP模拟赛]勇者的后缀【SA,RMQ,主席树,二分】
正题 题目链接:https://www.luogu.com.cn/problem/U142356?contestId=37784 题目大意 一个字符串,询问给出(x,l,r)(x,l,r)(x,l,r ...
- [2020.11.27NOIP模拟赛]中位数之中位数【二分,树状数组】
正题 题目链接:https://www.luogu.com.cn/problem/U142585?contestId=37855 题目大意 nnn个数,求所有区间中位数的中位数. 解题思路 二分一个答 ...
- [2020.11.25NOIP模拟赛]出租车【dp】
正题 题面链接:https://www.luogu.com.cn/problem/U142298?contestId=37766 题目大意 nnn个人有起点和终点,按顺序上车,但下车可以任意顺序,车最 ...
- [2020.11.3NOIP模拟赛]选数字【容斥】
正题 题目链接:https://www.luogu.com.cn/problem/U138404?contestId=36493 题目大意 nnn个数字,每次询问一个区间有多少个三对数或为xxx. 解 ...
- [2020.11.27NOIP模拟赛]拼图王【dp】
正题 题面链接:https://www.luogu.com.cn/problem/U142584 题目大意 nnn个010101串,按顺序分成两个序列,然后拼接成一个序列(拼接串x,yx,yx,y的话 ...
- [2020.11.25NOIP模拟赛]下棋【dp】
正题 题目链接:https://www.luogu.com.cn/problem/U142297?contestId=37766 题目大意 nnn个白棋mmm个黑棋排成一排,要求没有任何一段黑白棋的个 ...
- [2020.11.4NOIP模拟赛]简单的打击【NTT】
正题 题目链接:https://www.luogu.com.cn/problem/U138580 题目大意 两个长度为nnn的序列,要求重排后同位置的相加后众数的个数最多. 解题思路 定义aia_ia ...
- 2017.6.11 校内模拟赛
题面及数据及std(有本人的也有原来的) :2017.6.11 校内模拟赛 T1 自己在纸上模拟一下后就会发现 可以用栈来搞一搞事情 受了上次zsq 讲的双栈排序的启发.. 具体就是将原盘子大小cop ...
- 9.11 myl模拟赛
9.11 myl 模拟赛 100 + 100 + 0 第一题耗费了太多的时间,导致最后一题没有时间想,直接去写了暴力,而且出题人没有给暴力分.... Problem 1. superman [题目描述 ...
最新文章
- 惊了,老板要我开发一个工作流引擎!
- 马斯克要办大学上了热搜
- 去掉word注释里的横线
- C# 之 6.0 新特性
- iOS 第三方登录之 QQ登录
- System V IPC之共享内存
- xfce 双击窗口标题栏无法最大化解决办法
- fedora安装pyenv实现python的版本管理
- Resharper进阶一:简要介绍
- 十年厚积!Arm Neoverse 重磅推出 V1 和 N2平台,加速基础设施转型
- springboot 解决put,delete方法获取不到参数问题
- yaw公式_横摆角速度(Yaw Rate)估算(上)
- 修改文件类型(txt文件改为bat、sh文件)
- 计算机联锁控制台功能,计算机联锁控制台的改进及应用
- 爱普生(EPSON) ME300 问题解决
- 单片机原理及接口技术(C51微课第3版)张毅刚课后习题答案
- 2000-XP-2003操作系统常见问题
- 开机、重启和用户登录注销
- 2017年世界科技11大进展
- msm8909 关于能否分别控制充电电流和USB输出电流问题 (温度问题)
热门文章
- 华为服务器参数配置文件,最实用的华为配置基础手册.doc
- docker 修改阿里镜像源_Jetson Nano 修改源镜像
- Mysql实现幂等_阿里面试官:接口的幂等性怎么设计?
- levedb 导入 mysql_LevelDB-初始篇
- mysql pmod项目_内置函数 - 数学函数 - 《Apache Doris 文档(201812)》 - 书栈网 · BookStack...
- expsky.php,Typecho漏洞利用工具首发,半分钟完成渗透
- 飞机游戏项目完整代码(详解JAVA300集)
- #10010 「一本通 1.1 练习 6」糖果传递 (数学+贪心)
- mysql查询语句能否让一个字段不显示出来_天天写order by,你知道Mysql底层如何执行吗?
- AtCoder Regular Contest 063 E - Integers on a Tree 构造 + 二分图染色