ZROI2018普转提day6t3
分析
居然卡哈希数,万恶的出题人......
感觉我这个方法似乎比较呆,我的代码成功成为了全网最慢的代码qwq
应该是可以直接哈希的
但由于我哈希学的不好又想练练线段树维护哈希,于是就写了个线段树维护了一下哈希值
详见代码
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<unordered_map>
using namespace std;
#define uli unsigned long long
const long long HASH = ;
const long long mod = ;
long long pw[],d[];
long long len[],Ans;
char s[],t1[],t2[];
int is[mod+];
inline void build(long long le,long long ri,long long wh,long long pl,long long k){
len[wh]=ri-le+;
if(le==ri){
d[wh]=k%mod;
return;
}
long long mid=(le+ri)>>;
if(mid>=pl)build(le,mid,wh<<,pl,k);
else build(mid+,ri,wh<<|,pl,k);
d[wh]=(d[wh<<]+d[wh<<|]*pw[len[wh<<]]%mod)%mod;
return;
}
struct node {
long long fi,se;
};
inline node q(long long le,long long ri,long long wh,long long x,long long y){
if(le>=x&&ri<=y)return node{d[wh]%mod,ri-le+};
node Ans,a,b;
long long mid=(le+ri)>>,cnt=;
if(mid>=x)cnt+=,a=q(le,mid,wh<<,x,y);
if(mid<y)cnt+=,b=q(mid+,ri,wh<<|,x,y);
if(cnt==)return a;
if(cnt==)return b;
return node{(a.fi+b.fi*pw[a.se]%mod)%mod,a.se+b.se};
}
int main(){
long long n,m1,m2,i,j,k;
scanf("%s",s);
n=strlen(s);
pw[]=;
for(i=;i<n;i++)pw[i]=pw[i-]*HASH%mod;
long long h1=,h2=;
scanf("%s",t1);
m1=strlen(t1);
for(i=;i<m1;i++)
h1=(h1+(t1[i]-'a')*pw[i]%mod)%mod;
scanf("%s",t2);
m2=strlen(t2);
for(i=;i<m2;i++)
h2=(h2+(t2[i]-'a')*pw[i]%mod)%mod;
for(i=;i<n;i++)
build(,n-,,i,s[i]-'a');
memset(is,-,sizeof(is));
for(i=max(m1,m2);i<=n;i++)
for(j=;j+i-<n;j++){
long long hsh=q(,n-,,j,j+i-).fi;
if(is[hsh]==i)continue;
if(q(,n-,,j,j+m1-).fi==h1&&
q(,n-,,j+i-m2,j+i-).fi==h2)Ans++;
is[hsh]=i;
}
cout<<Ans;
return ;
}
ZROI2018普转提day6t3的更多相关文章
- ZROI2018普转提day6t1
传送门 分析 记录区间最大值,线段树上二分找比这个点大的最靠前位置即可 代码 #include<iostream> #include<cstdio> #include<c ...
- ZROI2018普转提day7t1
传送门 分析 一道有意思的小题... 我们发现如果$(1,1)$为白色,则将其变为白色需要偶数次操作,而如果为黑色则需要奇数次操作 我们知道要让A赢需要奇数次操作,所以我们只需要判断$(1,1)$的颜 ...
- ZROI2018普转提day7t2
传送门 分析 首先我们不难想到我们一定可以将每一个点分开算,然后看这个点被几个矩形包含 于是对于位置为$(i,j)$的点它被包含的次数为$i * (n-i+1) * j * (m-j+1)$ 这个式子 ...
- ZROI2018普转提day1t4
传送门 分析 就是飞飞侠这道题...... 我们可以将这张图建成好几层,每一层可以向下一层的上下左右无代价移动,而对于每个点如果付b[i][j]的代价就可以走到比它高a[i][j]的层上.我们用这种方 ...
- ZROI2018普转提day1t1
传送门 分析 我们先二分一下最终的平均值mid,然后让序列中的每一个数都减去这个mid,之后用新序列的前缀和建一棵线段树,枚举起点i,然后求出此时在i+L-1~i+R-1范围内的前缀和的最大值,用这个 ...
- ZROI2018普转提day2t4
传送门 分析 考场上暴力水过好评... 然后我的st表查询似乎是log的,然后log三方跑的比log方快,qwq. 我们发现如果一个区间的最小值就是这个区间的gcd,则这个区间合法.所以我们二分区间长 ...
- ZROI2018普转提day2t2
传送门 分析 我们发现2R+C实际就相当于R行C列的子集的个数.因此我们可以将所有集合的子集个数转换为每个集合属于的集合的个数.所以我们可以求出: 这个式子的意义为对于选i行j列的情况的所有方案乘上i ...
- ZROI2018普转提day2t1
传送门 分析 我们通过仔细研究不难发现对于一次交换(i,i+1)的操作之后,在i之前的点就不可能跑到i之后,i+1之后的的点也不可能跑到i+1之前,所以这个序列在一次交换之后就相当于被分成了两个部分. ...
- ZROI2018普转提day2t3
传送门 分析 考试的时候sb了......我们发现可以按照先序遍历将一棵树变成一个序列,而不需要删的数的数量便是最长上升子序列的长度,但是还有一个问题就是如果在5和7之间有3个空的位置就无法填入合法的 ...
随机推荐
- 浅学soap--------1
无wsdl文件: Clint.php //客户端 <?php $soap = new SoapClient(null,array('uri'=>'server','location'=&g ...
- 用VMware vSphere搭建虚拟化平台
核心组件 vSphere是一款可以独立安装和运行在祼机上的系统,因此与其他我们以往见过的VMware Workstation 软件不同的是它不再依存于宿主操作系统之上.在ESXi安装好以后,我们可以通 ...
- 学习动态性能表(11)v$latch$v$latch_children
学习动态性能表 第十一篇-(1)-V$LATCH 2007.6.7 Oracle Rdbms应用了各种不同类型的锁定机制,latch即是其中的一种.Latch是用于保护SGA区中共享数据结构的一种串 ...
- 浅谈Manacher
\(Manacher\)是由一个叫做\(Manacher\)的人发明的能在\(O(n)\)时间内找出一个字符串长度最长的回文子串的算法. 由于偶回文串形如\(abba\)这样的不好找对称中心,所以我们 ...
- 10.Selenium+Python+任务计划程序实现定时发送邮件
一.python具体代码实现 # coding=utf-8 import smtplib from email.mime.text import MIMEText from email.header ...
- 使用cef
win10的同学注意了按右键以管理员模式启动cmake-gui.exe在Where is the source code:里填上你解压的CEF3路径,如:F:\cef3\cef_binary_3.23 ...
- C# 多线程参数传递
之前使用多线程的时候,基本没有遇到过参数传递的情况,最近,接连遇到需要进行参数传递的多线程的使用.每次都要重新上网查一下,太麻烦了.为了方便以后的使用,就把经常参阅的网上资料记录下来. 原文地址如下: ...
- 静默安装Azure CLI
Azure的CLI目前已经是基于Python的2.0版本.其信息在下面的链接可以找到: https://github.com/Azure/azure-cli 其安装方法可以根据网站上描述的命令实现: ...
- 怎么让eclipse调试的时候不进入 class文件中去
Eclipse -> Window ->Preferences ->Java ->Debug "Suspend execution on uncaught excep ...
- NB-LOT 科普
最全科普!你一定要了解的NB-IoT 2017-06-19 21:04物联网/操作系统/科普 工信部下发通知推动150万NB-IoT基站落地.NB-IoT汹涌而来.很多网友要求雇佣军科普一篇NB-Io ...