bzoj3207花神的嘲讽计划Ⅰ
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=3207
给定一个原字符串和m个询问,每次查询原字符串[l,r]内是否包含给定字符串s (len(s)<=20且len(s)相同)
sol :考虑hash,将原串没len(s)位hash一次放入桶中,再将每次询问hash后在桶中查询(感觉很像rk-hash)
因为每次[l,r]转移到[l,r±1]、[l±1,r]都是从桶中取出or放入一个数,复杂的O(1),可以使用莫队算法
P.S.需要离散化而不能取模,否则memset复杂度爆炸
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#define int long long
using namespace std;
const int Mx=;
const int p=23333333LL;
struct Node { int x,y,val,num; } str[Mx];
bool cmp1 (Node a,Node b) { return a.x<b.x; }
bool cmp2 (Node a,Node b) { return a.y<b.y; }
int n,m,k,temp,a[Mx],h[Mx],ton[p+],ans[Mx];
signed main()
{
scanf("%lld%lld%lld",&n,&m,&k);
for(int i=;i<=n;i++) scanf("%lld",&a[i]);
for(int i=;i<=m;i++)
{
int Tmp[],tmp=;str[i].num=i;
scanf("%lld%lld",&str[i].x,&str[i].y);
for(int j=;j<=k;j++) scanf("%lld",&Tmp[j]);
for(int j=k;j>=;j--) str[i].val+=tmp*Tmp[j],tmp*=,tmp%=p,str[i].val%=p;
if(i==) temp=tmp/;
}
for(int i=k,tmp=;i>=;i--) h[]+=tmp*a[i],tmp*=,tmp%=p,h[]%=p;
for(int i=k+;i<=n;i++) h[i-k+]=(((h[i-k]-(a[i-k]*temp))*+a[i])%p+p)%p;
sort(str+,str++m,cmp1);
for(int i=;i<=m;i+=sqrt(m)) sort(str+i,str+min(m,i+(int)sqrt(m)),cmp2);
for(int i=;i<=m;i++)
{
if(i%(int)sqrt(m)==||i==)
{
memset(ton,,sizeof(ton));
for(int j=str[i].x;j<=str[i].y;j++) ton[(h[j]%p+p)%p]++;
}
else
{
for(int j=str[i-].x,to=str[i].x;j!=to;)
{
if(j<to) ton[(h[j]%p+p)%p]--,j++;
else j--,ton[(h[j]%p+p)%p]++;
}
for(int j=str[i-].y,to=str[i].y;j!=to;)
{
if(j<to) j++,ton[(h[j-k]%p+p)%p]++;
else ton[(h[j-k]%p+p)%p]--,j--;
}
}
ans[str[i].num]=ton[str[i].val];
}
for(int i=;i<=m;i++)
{
if(ans[i]==) puts("Yes");
else puts("No");
}
return ;
}
bzoj3207花神的嘲讽计划Ⅰ的更多相关文章
- BZOJ3207: 花神的嘲讽计划Ⅰ(hash)
3207: 花神的嘲讽计划Ⅰ Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3569 Solved: 1258[Submit][Status][Di ...
- [bzoj3207][花神的嘲讽计划Ⅰ] (字符串哈希+主席树)
Description 背景 花神是神,一大癖好就是嘲讽大J,举例如下: “哎你傻不傻的![hqz:大笨J]” “这道题又被J屎过了!!” “J这程序怎么跑这么快!J要逆袭了!” …… 描述 这一天D ...
- [BZOJ3207] 花神的嘲讽计划Ⅰ (主席树)
Description 背景 花神是神,一大癖好就是嘲讽大J,举例如下: “哎你傻不傻的![hqz:大笨J]” “这道题又被J屎过了!!” “J这程序怎么跑这么快!J要逆袭了!” …… 描述 这一天D ...
- BZOJ3207花神的嘲讽计划Ⅰ——主席树+hash
题目描述 背景 花神是神,一大癖好就是嘲讽大J,举例如下: “哎你傻不傻的![hqz:大笨J]” “这道题又被J屎过了!!” “J这程序怎么跑这么快!J要逆袭了!” …… 描述 这一天DJ在给吾等众蒟 ...
- BZOJ3207 花神的嘲讽计划I
Time Limit: 10 Sec Memory Limit: 128 MB Summary 给你一个模式串P,q个询问,对每个询问回答从Pl到Pr是否存在与给定串相同的子串,同时有所有的给定串长度 ...
- BZOJ3207: 花神的嘲讽计划Ⅰ
显然hash,然后stl随便搞. #include<bits/stdc++.h> #define N 100005 using namespace std; typedef unsigne ...
- BZOJ3207 花神的嘲讽计划
hash值建主席树. 垃圾题面没有熟虑范围害我MLE——>RE. By:大奕哥 #include<bits/stdc++.h> #define unll unsigned long ...
- 【字符串哈希】【莫队算法】bzoj3207 花神的嘲讽计划Ⅰ
既然询问的长度是确定的,那么我们可以将所有长度为K的字串弄个哈希值出来,这样字串存在性=>哈希值存在性. 自然上溢哈希,base=107比较不错. 序列长度n=>n-K+1 询问区间[x, ...
- [bzoj3207]花神的嘲讽计划Ⅰ[可持久化线段树,hash]
将每k个数字求一个哈希值,存入可持久化线段树,直接查询即可 #include <iostream> #include <algorithm> #include <cstd ...
随机推荐
- MyBatis归纳
SqlSessionTemplate详解 SqlSessionTemplate类是MyBatis-Spring的核心.这个类负责管理MyBatis的SqlSession,调用MyBatis的SQL ...
- javaweb基础(13)_session防止表单重复提交
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...
- java基础—equals方法
一.equals方法介绍 1.1.通过下面的例子掌握equals的用法 1 package cn.galc.test; 2 3 public class TestEquals { 4 public s ...
- Bootstrap历练实例:模态框(Modal)插件
模态框(Modal)是覆盖在父窗体上的子窗体.通常,其目的是显示来自一个单独源的内容,可以在不离开父窗体的情况下进行一些交互,子窗体提供一些交互或信息. <!DOCTYPE html>&l ...
- Electron的介绍
1.1 Electron是什么? 引用官网的一句话: Build cross platform desktop apps with JavaScript, HTML, and CSS 1.2 诞生 技 ...
- label自适应文本大小
UILabel *label = [[UILabelalloc] initWithFrame:CGRectZero]; NSString *string = @"aa2fkoksdajfis ...
- Spring Security 与 OAuth2(介绍)
https://www.jianshu.com/p/68f22f9a00ee Spring Security 与 OAuth2(介绍) 林塬 2018.01.23 11:14* 字数 3097 阅读 ...
- 【Python学习之七】递归——汉诺塔问题的算法理解
汉诺塔问题 汉诺塔的移动可以用递归函数非常简单地实现.请编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A.B.C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的 ...
- RSA非对称加密算法实现过程
RSA非对称加密算法实现过程 非对称加密算法有很多,RSA算法就是其中比较出名的算法之一,下面是具体实现过程 <?php /** */ class Rsa { /** * private key ...
- Nastya Studies Informatics CodeForces - 992B (大整数)
B. Nastya Studies Informatics time limit per test 1 second memory limit per test 256 megabytes input ...