
哈希
Lynstery
一只蒟蒻
展开
-
[hash+随机] 2017 计蒜之道初赛第五场UCloud 的安全秘钥
题意给出一个长度为 nn 的串 ss,每次询问求给出串tt,求 ss 的子串中与 tt 近似匹配 的个数。 定义 aa 与 bb 近似匹配: 1.∣a∣=∣b∣∣a∣=∣b∣,即 aa 串和 bb 串长度相等。 2.对于每种数字 xx,xx 在 aa 中出现的次数等于 xx 在 bb 中出现的次数。 n≤50000,∑|t|≤100000 n \le 50000, \sum |t| \le原创 2017-08-01 16:15:10 · 431 阅读 · 0 评论 -
[分治+floyed] 2016 计蒜之道 复赛 A 百度地图的实时路况
题意戳这里题解容易想到 floyedfloyed 干的就是类似的事情。 但是我们算点 ii 的答案时,其他点都要插入。 我们分治搞就行了,分治到单一节点时进行答案查询。 #include<cstdio>#include<algorithm>using namespace std;typedef long long LL;const int N=305;int n,a[N][N];L原创 2017-08-01 15:47:54 · 480 阅读 · 0 评论 -
[主席树+哈希] Codechef June Challenge 2017 #CLONEME
主席树+哈希套路。通过哈希做到快速比较一些东西是否相等,很可能和字典序什么的有关。这题就是利用哈希,在主席树上二分一样地走,找到从左边开始第一个不一样的和从右边开始第一个不一样的,然后xjb判断一下就好了。#include<cstdio>#include<algorithm>#define Lh ch[0]->hsh#define Rh ch[1]->hsh#define Ls ch[0]-原创 2017-09-19 17:50:27 · 413 阅读 · 0 评论 -
[哈希+差分] Codeforces 869E. The Untended Antiquity
其实很简单的题,然而之前题意读错了…… 我们怎么判断是否存在一个矩形,覆盖了一个点而没覆盖另一个点呢?实际上只要做个矩形覆盖就行了,若两个点上覆盖的矩形集合不同,则说明两点不可达。 我们可以对每个矩形,对应一个哈希值,进行矩形加。然后询问时判断两点的值是否相同即可。 矩形加,我们可以差分,然后二维树状数组实现。#include<cstdio>#include<cstdlib>#inclu原创 2017-10-09 13:48:51 · 371 阅读 · 0 评论 -
[搜索 meet in the middle+哈希] ProjectEuler 598. Split Divisibilities
搜索题。直接暴力枚举每个质数取几个。我们要判断一些数乘除最后是否等于1,这个不太好直接做。所以就给每个质数哈希一个值,把乘除变成加减,就好搞了。 需要 meet in middle ,开个hashmap记一下。 还是不够快。注意到后面有较多的指数只有1的质数。他只会对分子或分母贡献2,可以组合数算。 这样 n=100n=100 就可以 5s+ 左右跑出来了。#include<cstdio>#原创 2017-10-10 14:46:54 · 398 阅读 · 0 评论 -
[线段树+哈希] Codeforces 452F. Permutation
要注意到这是一个排列,1~n每个数都出现一次,不用上这个条件就做不了。对于一个数 xx , 所有的x−k, x+kx-k,\ x+k 一定在 xx 的同一侧,否则就输出YESYES 。所以就有了这样的解法:从左到右扫描序列,设当前到ii , 已经把 11 到 i−1i-1 的数都丢到权值线段树中了。若此时x−k, x+kx-k,\ x+k 有一个是1,有一个是0,则说明找到了。也就是只要比较一下权值原创 2017-10-06 15:01:04 · 340 阅读 · 0 评论