题面戳我

Solution

  • 我们按照每个字母出现的位置进行\(hash\),比如我们记录\(a\)的位置:我们就可以把位置表示为\(0101000111\)这种形式,然后进行字符串\(hash\)
  • 每次查询时,我们就把两个子串的每个字母的\(hash\)值,取出来,判断能否一一对应即可
  • 为啥我的常数那么大,2700ms

Code

//It is coded by ning_mew on 7.23
#include<bits/stdc++.h>
#define LL long long
using namespace std; const int maxn=2e5+7; int n,m;
char ch[maxn];
const LL Hash[3]={19260817,20000909,19491001};
LL sum[3][30][maxn];
LL Pow[3][maxn]; bool check(int l,int r,int len){
int box[2][30];
for(int i=0;i<3;i++){
memset(box,0,sizeof(box));
for(int j=1;j<=26;j++){
box[0][j]=((sum[i][j][l+len-1]-sum[i][j][l-1]*Pow[i][len])%Hash[i]+Hash[i])%Hash[i];
box[1][j]=((sum[i][j][r+len-1]-sum[i][j][r-1]*Pow[i][len])%Hash[i]+Hash[i])%Hash[i];
sort(box[1]+1,box[1]+26+1);
sort(box[0]+1,box[0]+26+1);
for(int i=1;i<=26;i++)if(box[0][i]!=box[1][i])return false;
}return true;
}
int main(){
scanf("%d%d",&n,&m); scanf("%s",ch+1);
for(int k=1;k<=26;k++){
LL box[3]={0,0,0};
for(int i=1;i<=n;i++){
for(int tt=0;tt<3;tt++){
if(ch[i]==('a'+k-1))box[tt]=(box[tt]*2+1)%Hash[tt];
else box[tt]=box[tt]*2%Hash[tt];
sum[tt][k][i]=box[tt];
}
}
}
Pow[0][0]=1;Pow[1][0]=1;Pow[2][0]=1;
for(int j=0;j<3;j++){
for(int i=1;i<=n;i++){Pow[j][i]=2*Pow[j][i-1]%Hash[j];}
}
for(int i=1;i<=m;i++){
int l,r,len;scanf("%d%d%d",&l,&r,&len);
if(check(l,r,len))printf("YES\n");
else printf("NO\n");
}return 0;
}

博主蒟蒻,随意转载。但必须附上原文链接:http://www.cnblogs.com/Ning-Mew/,否则你会场场比赛爆0!!!

最新文章

  1. UVALive 3027 Corporative Network
  2. 中科大各Linux发行版的更新源列表
  3. ajax 本地测试,使用Chrome 浏览器
  4. 李洪强iOS开发之initWithFrame,initWithCoder和aweakFormNib
  5. UVa 10294 Arif in Dhaka (First Love Part 2)(置换)
  6. 使用Partitioner实现输出到多个文件
  7. kibana 统计每天注册数
  8. Android 网络通信框架Volley基本介绍
  9. Code Sign error: No code signing identities found: No valid signing identities
  10. Process &#39;command &#39;/usr/lib/jvm/jdk1.8.0_25/bin/java&#39;&#39; finished with non-zero exit value 2
  11. 一键部署Kubernetes高可用集群
  12. 关于HTML5新手应该知道的几点知识
  13. (四):C++分布式实时应用框架——状态中心模块
  14. Android 7.1 WindowManagerService 屏幕旋转流程分析 (二)
  15. ConcurrentHashMap、CopyOnWriteArrayList、LinkedHashMap
  16. js到底new了点啥
  17. Mac 下安装node.js
  18. Jquery常用的方法总结
  19. Python txt文件读取写入字典的方法(json、eval)
  20. 关于控制台程序下使用mfc库中的函数时断言

热门文章

  1. Intellij IDEA的下载和使用(针对学生的免费使用计划)
  2. 校内模拟赛 Zbq&#39;s Music Challenge
  3. Quartz.net 定时任务之储存与持久化和集群(源码)
  4. WinForm 简易仿360界面控件
  5. Centos 6.9下部署Oracle 11G数据库环境的操作记录
  6. Centos6.5网络配置
  7. 1013 C. Photo of The Sky
  8. Week 1 工程表格
  9. 个人博客-week7
  10. 《Linux内核设计与实现》第四章学习笔记