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个空的位置就无法填入合法的 ...
随机推荐
- Oracle 11g 客户端连接 oracle 10g 服务端,乱码问题
从网上搜索资料基本确定:字符集错误 Pl/sql 连接到oracle 数据库 “select userenv('language') from dual” 找到服务端的对应的字符集,拷贝之: 到本 ...
- Mac 下 Mosquitto 安装和配置 (Mosquitto为开源的mqtt服务器)
官网:http://mosquitto.org/download/ 官网的介绍简单明了 Mac 下一个命令“brew install mosquitto” 安装成功了,还学会了brew 安装目录:/u ...
- Git学习--创建版本库
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或 ...
- python编程实例-使用正则收集IP信息
#!/usr/bin/env python from subprocess import PIPE,Popen import re def getIfconfig(): p = Popen(['ifc ...
- HihoCoder1366 逆序单词(字典树)
逆序单词 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在英文中有很多逆序的单词,比如dog和god,evil和live等等. 现在给出一份包含N个单词的单词表,其中每 ...
- Storm的并行度、Grouping策略以及消息可靠处理机制简介
转自:https://my.oschina.net/zc741520/blog/409949 概念: Workers (JVMs): 在一个节点上可以运行一个或多个独立的JVM 进程.一个Topolo ...
- axios 请求报错
报错如下: 解决:axios的请求配置中的baseURL配置错误,修改好即可. 报错前: baseURL: "192.168.30.220:3000", 解决后:baseURL: ...
- java程序员图文并茂细说Unity中调用Android的接口
http://bbs.csdn.net/topics/391876421 最近做一个项目,为同事提供接口,能使他在Unity中调用Android中的函数来实现QQ登陆并获取用户信息.按照一些书上和一些 ...
- 在winform下实现左右布局多窗口界面的方法(一)
在web页面上我们可以通过frameset,iframe嵌套框架很容易实现各种导航+内容的布局界面,而在winform.WPF中实现其实也很容易,通过本文给大家介绍在winform下实现左右布局多窗口 ...
- Azure VM开启资源监控
目前China的Azure VM资源监控默认是不打开的.本文将介绍如何开启VM的监控功能. 一 Azure VM 打开Azure的Portal页面https://portal.azure.cn,登录后 ...