![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Hash
文章平均质量分 67
PoPoQQQ
这个作者很懒,什么都没留下…
展开
-
BZOJ 1567 JSOI2008 Blue Mary的战役地图 Hash+二分
题目大意:给定两个矩阵,求最大公共子正方形边长首先二分答案 然后Check的时候先把A矩阵的所有边长为x的子正方形存在哈希表里 然后枚举B矩阵的每个子正方形查找注意二维哈希的时候横竖用的两个BASE不能一样 否则当两个矩阵关于对角线对称的时候会判断为相等尼玛我的哈希表居然比map慢……不活了#include#include#include#include#include#原创 2014-11-10 13:00:42 · 1864 阅读 · 0 评论 -
BZOJ 2795 Poi2012 A Horrible Poem Hash
题目大意:给定一个字符串,多次询问某一子串的循环节首先循环次数一定是子串长度的约数因此我们可以枚举子串长度的约数进行验证验证时选择Hash,验证[x,y-len]和[x+len,y]这两段是否相等,O(1)即可出解但是这样做总复杂度是O(q√n)的,会T考虑一个优化,设某个字母在子串中出现了k次,那么循环次数一定是k的约数因此我们取每个字母在子串中出现次数的Gcd,枚举这个原创 2015-01-20 12:18:38 · 1855 阅读 · 0 评论 -
BZOJ 2258 pku2758 Checking the Text 文本校对 Splay+Hash
题目大意:给定一个字符串,多次插入一个字符和询问某两个后缀的LCPSplay+Hash。同1014这逗比的询问。。。。。。#include #include #include #include #define M 50500#define BASE 151using namespace std;typedef unsigned long long ll;struct a原创 2015-01-22 10:52:31 · 1645 阅读 · 0 评论 -
BZOJ 1090 SCOI2003 字符串折叠 动态规划+Hash
题目大意:给定一个字符串,求按照题中所给的压缩方式最短能压缩到多长区间DP 令f[i][j]表示[i,j]区间内的字符串最短能压缩到多长普通的区间DP:f[i][j]=min{f[i][k]+f[k+1][j]} (i此外如果对这段字符串进行压缩,那么我们可以枚举循环节,用Hash来判断如果k是一个循环节,那么有f[i][j]=min(f[i][j],f[i][i+k-1]+dig原创 2015-01-23 20:10:28 · 1586 阅读 · 0 评论 -
BZOJ 2565 最长双回文串 Hash+二分
题目大意:给定一个字符串,求一个最长的子串,该字串可以分解为两个回文子串傻逼的我又忘了Manacher怎么写了= = 无奈Hash+二分吧首先将字符串用分隔符倍增,然后求出以每个点为中心的最长回文半径然后考虑两个回文串怎么合并成一个我们发现图中以i为中心的回文串和以j为中心的回文串合并后长度恰好为(j-i)*2能合并的前提是以两个点为中心的回文串有交点那么对于每个j原创 2015-02-24 17:04:30 · 2283 阅读 · 4 评论 -
BZOJ 1125 POI2008 Poc Hash+Treap
题目大意:给定n个长度为l的字符串,m次交换两个字符,问每个字符串任意时刻最多与多少个相同把字符串Hash一下 然后就是千山鸟飞绝了。。。http://blog.csdn.net/popoqqq/article/details/44353883BZ挂了交不了题真闹心QAQ#include #include #include #include #include #def原创 2015-03-25 17:35:51 · 1862 阅读 · 0 评论 -
BZOJ 2085 Poi2010 Hamsters Hash+倍增Floyd
题目大意:给定n个长度总和不超过10W的字符串,求一个最短的母串,使所有字符串的出现次数之和=m 这n个字符串保证不互相包含TM能不能好好翻译了令f[i][j]表示第i个字符串后面接上第j个字符串后会增加多少长度由于j一定不是i的子串,因此这实际上就是在求i的最长的后缀,该后缀同时也是j的前缀注意不能连出长度为0的边,因此当i=j时要保证这个长度怎么求呢?其实Hash一下,枚举原创 2015-03-05 08:20:15 · 1969 阅读 · 0 评论 -
BZOJ 2081 Poi2010 Beads Hash
题目大意:给定一个数字串,求所有的k满足当将这个数字串从左到右分成大小为k的块时不同的块数量最多 反转同构算一种枚举k,对于每个k将不同的串插入哈希表去重反转同构啥的每个串的哈希值乘一下反串的哈希值就行了时间复杂度O(n/1+n/2+...+n/n)=O(nlogn)#include #include #include #include #define M 200200#原创 2015-03-06 12:37:25 · 1531 阅读 · 2 评论 -
BZOJ 1142 POI2009 Tab Hash
题目大意:给定两个矩阵,保证矩阵内所有元素都不相同,求第一个矩阵通过交换行和列是否可以得到第二个矩阵令每一行的哈希值为这一行的元素排序后的RK哈希值,将行按照哈希值排序然后把每一列按顺序哈希一下,排个序取RK哈希作为整个矩阵的哈希值判断两个矩阵的哈希值是否相等即可由于矩阵中元素不重复所以可以保证第一步的哈希值不会出现重复然后。。。我都写完了它告诉我是2B题????算了反正P原创 2015-04-01 10:40:25 · 1743 阅读 · 2 评论 -
BZOJ 2803 Poi2012 Prefixuffix Hash
题目大意:给定一个字符串S,求一个最长的L(L*2一开始我的想法是枚举L,判断长度为L的前缀和长度为L的后缀的所有循环同构的哈希值之和是否相等但是很快我发现这做法是扯淡- - 因为一个字符串所有循环同构的哈希值之和等于这个字符串所有字符ASCII码之和乘上(BASE^len+BASE^(len-1)+...+BASE^2+BASE+1)然后我在想能不能考虑修改一下哈希函数呢?比如给原创 2015-03-04 13:14:32 · 1912 阅读 · 0 评论 -
BZOJ 3790 神奇项链 Hash+二分+树状数组
题目大意:给定一个串,问这个串最少可以由回文串拼接多少次而成(拼接可以重叠)首先将每两个字符之间插入占位符,然后Hash+二分搞出所有极大回文串(可以用manacher,我不会)问题转化成了给定一些区间,求最少的能覆盖整个数轴的区间将所有区间按照某一端点排序 然后上树状数组即可回头还是去学学manacher吧。。。#include #include #include #i原创 2014-12-11 15:01:32 · 1526 阅读 · 0 评论 -
BZOJ 1170 [Balkan2007]Cipher Hash
题目大意:给定一个二维矩阵,求出现次数最多的a*b的子矩阵二维Hash,只要记住横纵的BASE不能相同就可以,爱怎么搞怎么搞一开始写的自然溢出 结果OLE 以为是自然溢出被卡掉了于是写了双取模…… 结果还是OLE最后发现尼玛这题读入坑爹……字符串里有空格不说,满满的不可见字符是咋回事……记住不要用scanf读入……可以用gets,或者fread,注意要把一开始的回车过滤掉get原创 2014-12-10 14:08:16 · 1397 阅读 · 0 评论 -
BZOJ 3197 Sdoi2013 assassin 动态规划+树同构+费用流
题目大意:给定一棵树和两组权值,求第一组权值最少改变多少个之后这棵树经过重标号之后与第二组权值相同这个题做法很神- -首先和3162一样的处理方式 我们先找到这棵树的重心作为根 如果重心有两个就新建一个根连向这两个重心令f[x][y]表示x所在子树的第一组权值和y所在子树的第二组权值匹配的最小花销转移的必要条件是x所在的子树与y所在的子树同构且x与y深度相同为了保证无后效性,x原创 2015-01-27 23:35:56 · 2507 阅读 · 0 评论 -
BZOJ 1414 ZJOI2009 对称的正方形 Hash+二分
题目大意:求正方形回文子矩阵数量(即左右对称、上下对称的正方形子矩阵)正解是Manacher……但是Hash+二分是能卡过去的0.0 我太丧病了0.0首先为了避免边长奇偶性带来的WT要把矩阵扩大二倍 然后样例就变成了这样:00000000000040204040400000000000003010404030000000000000305030303000000原创 2014-11-10 14:29:36 · 1948 阅读 · 0 评论 -
NOIP 2014 D2T3 解方程 Hash大法好
题目大意:给定高次方程an*x^n+...+a1*x^1+a0*x^0=0 求[1,m]区间内有多少个整数根ai懒得高精,考场上写的long double乱搞……30分打底50分顶天QAQ当我终于搞定了各种非官方数据之后,我只能长跪大地,手捧鲜花,仰望上苍高喊:哈希大法好!首先阿贝尔在200年前告诉我们 五次以上方程没有求根公式 于是我们只能枚举1~m 这个是100W然后100原创 2014-11-10 19:09:26 · 3702 阅读 · 0 评论 -
Vijos P1915 解方程 加强版 还是Hash大法好!
题目大意:同解方程 数据范围mO(m)做法见 http://blog.csdn.net/popoqqq/article/details/40984859O(m)跪了你就当我没辙么?首先找到一个比较靠谱的第一个质数 将对第一个质数取模为0的值全都存在一个数组里由于这个是有循环节的 所以我们只需要处理出[0,p-1]中对第一个质数取模为0的数就可以搞出所有了然后对于这个数组里的所有原创 2014-11-13 13:23:07 · 1320 阅读 · 0 评论 -
BZOJ 2351 BeiJing2011 Matrix Hash
题目大意:给定一个m*n的01矩阵,问Q个a*b的子矩阵中有多少在原矩阵中出现过首先将原矩阵哈希 将所有a*b的子矩阵的哈希值插入哈希表 然后对于每个矩阵哈希之后去哈希表中查找即可注意不要因为是01矩阵就把进制数弄得太小……一开始用了3和5,结果狂WA不止,无奈改成了999911657和999911659才过……此外就是我的哈希表终于比map快了……好鸡冻……#include#i原创 2014-11-13 18:20:19 · 2091 阅读 · 0 评论 -
BZOJ 1014 JSOI2008 火星人prefix Splay+Hash+二分
题目大意:给定一个字符串,提供下列操作:1.查询从x开始的后缀和从y开始的后缀的最长公共前缀长度2.将x位置的字符修改为y3.在x位置的字符后面插入字符y看到这题一开始我先懵住了。。。这啥。。我第一时间想到的是后缀数据结构 但是不会写 而且后缀数据结构也不支持修改操作后来无奈找了题解才知道是Hash+二分。。。 太强大了 Hash+二分打爆一切啊用Splay维护这个字符串的原创 2014-10-03 11:42:04 · 2691 阅读 · 0 评论 -
BZOJ 3207 花神的嘲讽计划I Hash+可持久化线段树/划分树
题目大意:给定一个数字串,多次求某个区间内有没有一个长度为k的子串首先对字符串进行哈希 然后问题就转化成了求一个区间内有没有某个数可持久化线段树即可 其实我觉得划分树会更快一些 可以写写※注意事项:1.n2.哈希值用unsigned long long 铁则 unsigned int 会被卡掉3.线段树那里直接x+y>>1会爆unsigned long long 转原创 2014-10-19 14:55:25 · 2040 阅读 · 0 评论 -
BZOJ 3555 Ctsc2014 企鹅QQ Hash
题目大意:给定n个不相同的字符串,问有多少对字符串只差一个字母枚举每个只差一个字母的位置,取除这个字符以外的哈希值判断即可#include#include#include#include#define M 30300#define BASE 149using namespace std;typedef unsigned long long ll;int n,k,ans;l原创 2014-11-06 14:05:12 · 2615 阅读 · 0 评论 -
BZOJ 3162 独钓寒江雪 树同构+树形DP
题目大意:给定一棵树,求本质不同的独立集个数对1000000007取模后的值首先独立集个数应该都会求吧- -令f[x][0]为x这个点不选的独立集个数f[x][1]为x这个点选的独立集个数那么有f[x][0]=Σf[son[x]][0]+f[son[x]][1]f[x][1]=Σf[son[x]][0]但是现在要求本质不同说到本质不同我们很容易想到群论原创 2015-01-27 19:55:36 · 2149 阅读 · 0 评论 -
BZOJ 3198 Sdoi2013 spring Hash+容斥原理
题目大意:给定n个元素,每个元素是一个六元组,求有多少对元素满足相同的位置恰好有k个首先对于恰好有K个这种东西果断考虑容斥原理我们2^6枚举相同的位置恰好有k个元素相同的对数=至少有k个位置相同的对数-至少有k+1个位置相同的对数+至少有k+2个位置相同的对数……但是我们计数时会发现一些问题 比如下面这组样例显然是0:2 31 2 3 4 5 51 2 3 4 6 6原创 2015-01-28 18:24:08 · 2776 阅读 · 2 评论 -
BZOJ 3899 仙人掌树的同构 仙人掌同构+KMP算法
题目大意:给定一棵仙人掌,求有多少自同构仙人掌同构问题= = 曾经出过一个判断两个仙人掌是否同构的题,感觉和这个题很类似首先假设这是一棵树,考虑怎么做我们首先找到树的重心(如果有两个就在中间加一个点变成一个) 然后把树Hash 对于一棵树 如果某一哈希值的子树有kk个 就把答案乘上一个k!k!现在变成了仙人掌,那么我把每个环变成一个红点连向环上的所有点,然后把原先环上的边拆除,可以得到一棵树,原创 2015-07-10 14:01:14 · 2675 阅读 · 2 评论