【bzoj4084】【sdoi2015】双旋转字符串
题解
- 首先题中说了$n>=m$;
- 分成的循环串左右两边为本质相同的单循环串循环串,分别长为$l = \frac{n + m}{2} $;
- 所以$S$串的前$l$位为双循环串的一半$S1$,后一半为$S2$;
- 倍长$S1$找到$S2$在$S1$中出现的位置,把单循环串匹配位置后的剩下的$m$位哈希存下来;
- 读入每个$T$串查找即可
- 注意有可能$S2$在$S1$中会重复出现,记录$last$防止重复计算;
#include<bits/stdc++.h>
#define ull unsigned long long
#define base 1234567891
#define il inline
#define rg register
using namespace std;
const int N=,sz=1e7;
int n,m,k,l,t1,t2,o,nt[sz],hd[sz],w[sz],nxt[N<<],lst[sz];
char s[N<<],t[N<<];
ull h[N<<],v[sz],pw,ans;
il char gc(){
static char*p1,*p2,buf[];
if(p1==p2)p2=(p1=buf)+fread(buf,,,stdin);
return(p1==p2)?EOF:*p1++;
}
il int rd(){
int x=; char c=gc();
while(c<''||c>'')c=gc();
while(c>=''&&c<='')x=x*+c-'',c=gc();
return x;
}
il char gt(){char c=gc();while(!isalpha(c))c=gc();return c;}
void solve(){
for(rg int i=;i<=n;i++){
for(rg int j=;j<=l;j++)h[j]=h[j-]*base+(s[j]=gt());
for(rg int j=;j<=l;j++)h[j+l]=h[j+l-]*base+s[j];
if(t1)t[]=gt();
for(rg int j=,tj=;j<=t1;nxt[++j]=tj){
t[j]=gt();
while(tj&&t[j]!=t[tj+])tj=nxt[tj];
if(t[j]==t[tj+])tj++;
}
for(rg int j=,tj=;j<=l+max(,t1-);j++){
while(tj&&s[j]!=t[tj+])tj=nxt[tj];
if(s[j]==t[tj+])tj++;
if(!t1||tj==t1){
ull x = h[j+t2] - h[j]*pw;
int fg=;
for(int r=hd[x%sz];r;r=nt[r])if(v[r]==x){
fg=;
if(lst[r]!=i)w[r]++,lst[r]=i;
break;
}
if(!fg)nt[++o]=hd[x%sz],v[hd[x%sz]=o]=x,w[o]=,lst[o]=i;
tj=nxt[tj];
}
}
}
t1-=l;
for(rg int i=;i<=m;i++){
ull x=;for(rg int j=;j<=t2;j++)x=x*base+gt();
for(int r=hd[x%sz];r;r=nt[r])if(v[r]==x){ans+=w[r];break;}
}
}
int main(){
#ifndef ONLINE_JUDGE
freopen("bzoj4084.in","r",stdin);
freopen("bzoj4084.out","w",stdout);
#endif
n=rd();m=rd();t1=rd();t2=rd();l=(t1+t2)>>;
t1-=l;for(int i=pw=;i<=t2;i++)pw=pw*base;
solve();
printf("%llu\n",ans);
return ;
}bzoj4084
【bzoj4084】【sdoi2015】双旋转字符串的更多相关文章
- [bzoj4084][Sdoi2015]双旋转字符串_hash
双旋转字符串 bzoj-4084 Sdoi-2015 题目大意:给定两个字符串集合 S 和 T .其中 S 中的所有字符串长度都恰好为 N ,而 T 中所有字符串长度都恰好为 M .且 N+M 恰好为 ...
- BZOJ 4084 [Sdoi2015]双旋转字符串
题解:hash 至今不会unsigned long long 的输出 把B扔进map 找A[mid+1][lenA]在A[1][mid]中的位置 把A[1][mid]贴两遍(套路) 枚举A[mid+1 ...
- bzoj 4084 双旋转字符串
给两个集合A,B,找满足要求的(a,b)的对数,可以计算对于a,哪些b成立. 还有就是字符串hash的使用,感觉平时用字符串hash太少了. /**************************** ...
- 剑指Offer面试题:34.翻转单词顺序VS左旋转字符串
一.题目一:翻转单词顺序 1.1 题目说明 题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a st ...
- 【面试题042】翻转单词顺序VS左旋转字符串
[面试题042]翻转单词顺序VS左旋转字符串 题目一: 输入一个英文句子,反转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理. 例如输入字符串“I a ...
- lintcode :旋转字符串
题目: 旋转字符串 给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转) 样例 对于字符串 "abcdefg". offset=0 => "abcdef ...
- 九度OJ 1362 左旋转字符串(Move!Move!!Move!!!)【算法】
题目地址:http://ac.jobdu.com/problem.php?pid=1362 题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运 ...
- LintCode 面试题 旋转字符串
1.题目描述 题目链接:http://www.lintcode.com/zh-cn/problem/rotate-string/ 给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转) 2. ...
- 1289 大鱼吃小鱼 1305 Pairwise Sum and Divide 1344 走格子 1347 旋转字符串 1381 硬币游戏
1289 大鱼吃小鱼 有N条鱼每条鱼的位置及大小均不同,他们沿着X轴游动,有的向左,有的向右.游动的速度是一样的,两条鱼相遇大鱼会吃掉小鱼.从左到右给出每条鱼的大小和游动的方向(0表示向左,1表示向右 ...
随机推荐
- ActiveMQ笔记:管理和监控
ActiveMQ提供了比较丰富的监控和管理工具.在ActiveMQ的网页里(http://activemq.apache.org/how-can-i-monitor-activemq.html)提到了 ...
- Linux 文件系统 -- 简述几种文件类型
Linux 中一切皆为文件,文件类型也有多种,使用 ls -l 命令可以查看文件的属性,所显示结果的第一列的第一个字符用来表明该文件的文件类型,如下: 1.普通文件 使用 ls -l 命令后,第一列第 ...
- Tomcat安全管理规范
s 前言 随着公司内部使用Tomcat作为web应用服务器的规模越来越大,为保证Tomcat的配置安全,防止信息泄露,恶性攻击以及配置的安全规范,特制定此Tomcat安全配置规范. 定位:仅对tomc ...
- Nginx是如何配置为 Web 服务器的【转载】
详解 Nginx是如何配置为 Web 服务器的 林涛 发表于:2016-11-29 23:23 分类:WebServer 标签:Nginx,web,web服务器 521次 抽象来说,将 Nginx 配 ...
- final用户体验报告
本次没有新增用户,所联系的用户与beta版本相同 用户序号 用户来源 用户下载软件途径 用户姓名 用户描述(信息) 使用次数 用户评价 1 张恩聚 QQ发送可执行文件 周楠 吉林大学在读研究生 ...
- jsp九大内置对象之config 和 out
jsp中config的作用是读取web.xml中的配置信息,一般在后台获取初始化的参数,jsp页面用的较少因为jsp属于表现层,一般是获取数据. jsp中的out对象是将内容放到缓冲区中然后显示出来
- 第一次spring冲刺第6天
鉴于昨天的调查,今天做了个谈论,主要针对以下几个问题 1.我们的客户类型? 2.如何实现他们的需求? 3.他们真正想要什么? 4.如何保证他们的满足度? 5.怎么使得工程不陷入死循环? 6.还存在什么 ...
- 【Coursera】高斯混合模型
一.高斯混合模型 软分类算法,即对每一个样本,计算其属于各个分布的概率,概率值最大的就是这个样本所属的分类. 对于训练样本的分布,看成为多个高斯分布加权得到的.其中每个高斯分布即为某一特定的类. 高斯 ...
- Beta版本测试第二天
一. 每日会议 1. 照片 2. 昨日完成工作 登入界面的优化与注册界面的优化,之前的登入界面与注册界面没有设计好,使得登入界面与注册界面并不好看,这次对界面进行了优化.另外尝试了找回密码的功能. 3 ...
- ISCC2018(web)
ISCC2018 web writeup (部分) #web1:比较数字大小 只要比服务器上的数字大就好了 限制了输入长度,更改长度就好 #web2: 普通的代码审计,数组绕过 #web3:本地的诱惑 ...