BZOJ 4084 [Sdoi2015]双旋转字符串
题解:hash
至今不会unsigned long long 的输出
把B扔进map
找A[mid+1][lenA]在A[1][mid]中的位置
把A[1][mid]贴两遍(套路)
枚举A[mid+1][lenA]在A[1][mid]中出现的位置,把其他位置的hash值求出来,在map里查有多少符合的B串
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<algorithm>
using namespace std;
const int maxn=8000009;
typedef unsigned long long uLint; int n,m,lenA,lenB,mid;
char s[maxn];
long long ans; int r;
uLint h[maxn];
uLint fac[maxn];
map<uLint,int>ma;
uLint a[maxn];
void Addstring(){
int cnt=0;
uLint midstring=0;
for(int i=mid+1;i<=lenA;++i)midstring=midstring*233+s[i]; for(int i=1;i<=mid;++i)s[i+mid]=s[i]; h[0]=0;
for(int i=1;i<=mid+mid;++i)h[i]=h[i-1]*233+s[i];
for(int i=1;i<=mid;++i){
uLint tm=h[i+r-1]-h[i-1]*fac[r];
if(tm!=midstring)continue;
a[++cnt]=h[i+mid-1]-h[i+r-1]*fac[mid-r];
}
sort(a+1,a+1+cnt);
cnt=unique(a+1,a+1+cnt)-a-1;
for(int i=1;i<=cnt;++i)ma[a[i]]++;
} int main(){
scanf("%d%d%d%d",&n,&m,&lenA,&lenB);
fac[0]=1;
for(int i=1;i<=lenA+lenA;++i)fac[i]=fac[i-1]*233;
mid=(lenA+lenB)>>1;
r=lenA-mid; while(n--){
scanf("%s",s+1);
Addstring();
}
while(m--){
scanf("%s",s+1);
uLint tm=0;
for(int i=1;i<=lenB;++i)tm=tm*233+s[i];
ans=ans+ma[tm];
}
cout<<ans<<endl;
return 0;
}
BZOJ 4084 [Sdoi2015]双旋转字符串的更多相关文章
- [bzoj4084][Sdoi2015]双旋转字符串_hash
双旋转字符串 bzoj-4084 Sdoi-2015 题目大意:给定两个字符串集合 S 和 T .其中 S 中的所有字符串长度都恰好为 N ,而 T 中所有字符串长度都恰好为 M .且 N+M 恰好为 ...
- bzoj 4084 双旋转字符串
给两个集合A,B,找满足要求的(a,b)的对数,可以计算对于a,哪些b成立. 还有就是字符串hash的使用,感觉平时用字符串hash太少了. /**************************** ...
- 【bzoj4084】【sdoi2015】双旋转字符串
题解 首先题中说了$n>=m$; 分成的循环串左右两边为本质相同的单循环串循环串,分别长为$l = \frac{n + m}{2} $; 所以$S$串的前$l$位为双循环串的一半$S1$,后一半 ...
- 剑指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表示向右 ...
随机推荐
- haproxy+keepalive双主高可用实现负载均衡
转载自https://blog.51cto.com/3381847248/1977073 前面我已经介绍了haproxy结合keepalive做简单的双主高可用,如果不清楚的话,可以去我的上一 篇博客 ...
- C++连接sqlite数据库的增删查改操作
这个代码是接着上次说的,要用VS2013操作数据库,首先要配置好环境,创建好数据库表等. 不明白的翻我前面2篇看看~~~ 关于前面的用到的goto 语句,这个我也是参考其他博主写的,现在我注释掉了,毕 ...
- mysql 模糊查询中包含特殊字符查询
- python数据分析基础
---恢复内容开始--- Python数据分析基础(1) //2019.07.09python数据分析基础总结1.python数据分析主要使用IDE是Pycharm和Anaconda,最为常用和方便的 ...
- Golang的基础数据类型-字符型
Golang的基础数据类型-字符型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符型概述 Go语言中的字符有两种,即uint8类型和rune类型. uint8类型: 我们也 ...
- HihoCoder第七周:完全背包问题
1043 : 完全背包 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 且说之前的故事里,小Hi和小Ho费劲心思终于拿到了茫茫多的奖券!而现在,终于到了小Ho领取奖励的时 ...
- MongoDB 删除,添加副本集,并修改副本集IP等信息
MongoDB 删除,添加副本集,并修改副本集IP等信息 添加副本,在登录到主节点下输入 rs.add("ip:port"); 删除副本 rs.remove("ip:po ...
- 我为NET狂官方面试题-数据库篇答案(转)
题目:http://www.cnblogs.com/dunitian/p/6028838.html 汇总:http://www.cnblogs.com/dunitian/p/5977425.html ...
- 《方方格子》(WPS版) _v3.6.6.0
<方方格子>(WPS版) 下载地址(b2a7) SHA1:35AE4D99B77613D9E2BAF912477DC74C5C2B8389 版本信息 发行版本 3.6.6.0 ...
- IDEA 分屏显示
效果: 步骤: 对着某个标签页单击右键,选择Split Vertically或者Split Horizontally即可.