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 ...
随机推荐
- [dp]uestc oj E - 菲波拉契数制
E - 菲波拉契数制 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- 使用HelpProvide组件调用帮助文件
实现效果: 知识运用: HelpProvider组件的HelpNameSpace属性 //于对象关联的帮助文件名 public virtual string HelpNameSpace {get; s ...
- Python封装补充
property属性 property实际是setter getter deleter是集合体,并不是一个单独的方法 import math # 使用的库 class Circle: def __in ...
- 毛毛虫组【Beta】Scrum Meeting 1
第一天 日期:2019/6/23 前言 第一次会议: 时间:6月20日 地点:教9-C404机房 内容:此次会议主要确定组内成员具体分工,并对目标进行了初步的确定. 1.1 今日完成任务情况以及遇到的 ...
- 《毛毛虫组》【Alpha】Scrum meeting 3
第二天 日期:2019/6/16 1.1 今日完成任务情况以及遇到的问题. 今日完成任务情况: 货物入库管理模块设计: (1)对数据库表--tb_InStore进行修改并完善: (2)学习SQL Se ...
- Python -- 函数之推导式
5.12 推导式 l = [] for i in range(1,11): l.append(i) print(l) # 用列表推导式 (一行搞定) l = [i for i in range(1,1 ...
- Spinal Tap Case -freecodecamp算法题目
Spinal Tap Case 1.要求 将字符串转换为 spinal case. Spinal case 是 all-lowercase-words-joined-by-dashes 这种形式的,也 ...
- PHP 代码优化建议
1.尽量静态化: 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍.当然了,这个测试方法需要在十万级以上次执行,效果才明显.其实静态方法和非静态方法的效率 ...
- python3 完全平方数(循环)
题目 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 代码: for i in range(1,85): if 168 % i == 0: j = 168 ...
- VS2017生成.net core项目报错:The current .NET SDK does not support targeting .NET Core 2.1. Either
今天在生成一个项目的时候,生成报错,错误如下:The current .NET SDK does not support targeting .NET Core 2.1. Either target ...