【bzoj4084】[Sdoi2015]bigyration hash
bzoj没有题面,题面在vijos。
所以说读入char再丢给string并不会慢…
短串扔到hash表里。
长串的前半部分复制一份,然后在上面跑,若长串的后半部分出现过,则答案加上后面的hash值的出现次数。
写了双hash+挂链表,因为写了指针,并且双hash常数大,所以TLE+MLE,还有莫名其妙的WA…………
自然溢出+map在vijos上就是过不了……T两个点,不过在bzoj还是能A的。
看题解有人写的在bool数组中若已被占用则往后跳…在bzoj实测表现和map差不多…vijos也是T两个点…
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;typedef unsigned long long ULL;
typedef long long LL;
const int SZ = 4000010;
const int base = 13331;string S1[SZ],S2[SZ];map<ULL,int> h;ULL hash[SZ],mi[SZ];ULL gethash(string s)
{ULL ans = 0;for(int i = 0;i < s.length();i ++)ans = ans * base + s[i] - 'a' + 1;return ans;
}ULL getstr(int l,int r)
{int len = r - l + 1;return hash[r] - hash[l - 1] * mi[len];
}char s[SZ];void read(char s[])
{memset(s,0,sizeof(s));int tot = 0;char a = getchar();for(;a < 'a' || a > 'z';a = getchar());for(;a >= 'a' && a <= 'z';a = getchar())s[tot ++] = a;
}int main()
{int n,m,len1,len2;scanf("%d%d%d%d",&n,&m,&len1,&len2);mi[0] = 1;for(int i = 1;i <= len1 + len2;i ++)mi[i] = mi[i - 1] * base;for(int i = 1;i <= n;i ++)read(s),S1[i] = s;for(int i = 1;i <= m;i ++)read(s),S2[i] = s;if(len1 < len2) swap(S1,S2),swap(n,m),swap(len1,len2);for(int i = 1;i <= m;i ++)h[gethash(S2[i])] ++;int len = (len1 + len2) >> 1;LL ans = 0;for(int i = 1;i <= n;i ++){for(int j = 0;j < len * 2;j ++)hash[j + 1] = hash[j] * base + S1[i][j % len] - 'a' + 1;ULL x = 0;for(int j = len;j < len1;j ++)x = x * base + S1[i][j] - 'a' + 1;for(int j = 1;j <= len;j ++){ULL y = getstr(j,j + len1 - len - 1);if(x == y){ULL a = getstr(j + len1 - len,j + len - 1);ans += h[a];}}}printf("%lld\n",ans);return 0;
}
【bzoj4084】[Sdoi2015]bigyration hash相关推荐
- 【BZOJ3994】[SDOI2015]约数个数和 莫比乌斯反演
[BZOJ3994][SDOI2015]约数个数和 Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数 ...
- 【BZOJ3993】[SDOI2015]星际战争 二分+最大流
[BZOJ3993][SDOI2015]星际战争 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地 ...
- [BZOJ4084][Sdoi2015]bigyration hash
听说单hash能过23333 于是乎hash乱搞一下就好了辣 然而map要TLE .... #include<cstdio> #include<algorithm> #incl ...
- 【bzoj4084】【sdoi2015】双旋转字符串
题解 首先题中说了$n>=m$; 分成的循环串左右两边为本质相同的单循环串循环串,分别长为$l = \frac{n + m}{2} $; 所以$S$串的前$l$位为双循环串的一半$S1$,后一半 ...
- 【bzoj2081】[Poi2010]Beads Hash
题目描述 Zxl有一次决定制造一条项链,她以非常便宜的价格买了一长条鲜艳的珊瑚珠子,她现在也有一个机器,能把这条珠子切成很多块(子串),每块有k(k>0)个珠子,如果这条珠子的长度不是k的倍数, ...
- 【java】分布式一致性hash算法
1.概述 本文是视频 视频 的笔记 2. 一致性hash算法哪里用? 一般情况下如果我们的数据很多,一台机器装不下,我们一般会采用分布式缓存,但是因为是分布式,我们要解决3个问题 数据怎么存储到分布式 ...
- 【C++】字符串的 hash 值计算
C++ 11 中新加入的容器 unordered_map 和 unordered_set 底层都是哈希表实现的,那么对于内置类型,肯定是可以自动计算出 hash 值的,但是对于像 pair< ...
- 【PHP】PHP实现Hash环/Hash一致性原理实现
PHP实现Hash环/Hash一致性原理 Hash环可用于Redis机器集群.Mysql的分表操作,扩容时能对最大限度的减少损失 文章开头先引用大佬文章:什么是Hash环 class consisTe ...
- 【bzoj3994】[SDOI2015]约数个数和 莫比乌斯反演
题目描述 设d(x)为x的约数个数,给定N.M,求 输入 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. 输出 T行,每行一个整数,表示你 ...
最新文章
- linux centos yum 报错 one of the configured repositories failed 解决方法
- Spring MVC 函数式编程进阶
- UA MATH567 高维统计I 概率不等式3 亚高斯性与亚高斯范数
- java的classpath是什么_JAVA初学者classpath设置情况是什么?
- 别“躺”着了,赶紧把「复盘」做起来
- 剑指offer二十二之从上往下打印二叉树
- 2018ACM/ICPC亚洲区域赛(焦作)F. Honeycomb
- Firefox 检测到该服务器正在将此地址的请求循环重定向。 此问题可能是因为禁用或拒绝 Cookie 导致。...
- WSL1 升级为 WSL2
- c++ map 修改value_哈希表:其实需要哈希的地方都能找到map的身影
- python附件发送到邮箱里_使用python将最新的测试报告以附件的形式发到指定邮箱...
- 那些html编辑器有代码片段6,VS Code 折腾记 - (6) 基本配置/快捷键定义/代码片段的录入(snippet)...
- 有面值为1元、3元和5元的硬币若干枚,如何用最少的硬币凑够11元?
- php 126怎么设置发送邮箱验证码,邮箱发送验证码(示例代码)
- 使用Logisim软件实现一位全加器,四位串行加法器,四位并行加法器。
- GEE|影像可视化|导出分类结果图像
- win10 Administrator账户被禁用怎么办?
- [渝粤教育] 西北农林科技大学 国际贸易实务 参考 资料
- tornado源码分析(四)之future、gen.coroutine
- Android 布局 layout
热门文章
- 尤雨溪大大在 6 月 4 日的 Vue3.0 技术分享
- Python Opencv cv2提取图像中某种特定颜色区域(例如黑字白纸背景下的红色公章提取),并将纯色背景透明化
- 不管你学的是什么专业,你都应该多少懂些管理学的东西之【鳄鱼法则】【鲇鱼效应】...
- 乳腺仿体breast phantom的MATLAB实现及探讨
- 一缕黑暗中的火光-----------类图--------------优雅的建模语言
- C++11之防止类型收窄
- 深入解读 Spark 宽依赖和窄依赖(ShuffleDependency NarrowDependency)
- “超女民-主”?“画饼充饥”!
- 【ElementUI】el-upload 到底该怎么使用?记录有时上传图片会失败,有时上传成功又出现图片闪动的问题
- 新海诚动漫《天气之子》1080P 4K下载