哈希
_beginend
这个作者很懒,什么都没留下…
展开
-
bzoj 3357: [Usaco2004]等差数列 动态规划
题意给出n(1M-n<=2000)个数ai(0<=ai<=10^9),求最长的等差数列长度。分析我用的是nlogn的方法写的,勉强水了过去,顺便学习了已发map的用法。 f[i,j]表示结尾为ai倒数第二个数为j时的最大长度。 f[i,a[j]]=max(f[j,a[j]*2-a[i]],f[i,a[j]],2)正解其实就是f[i,j]表示最后一个数是aj倒数第二个数是ai时的最大长度,每处理完原创 2016-10-21 20:41:20 · 642 阅读 · 0 评论 -
bzoj 3198: [Sdoi2013]spring hash+容斥原理
题意给定n个元素,每个元素是一个六元组,求有多少对元素满足相同的位置恰好有k个。 n<=100000分析很容易想到容斥原理。 不难发现,容斥系数要乘上一个组合数CkyC_y^k,y表示选了多少个位置。证明的话,感受一下就好了。代码#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<alg原创 2017-10-06 11:12:33 · 279 阅读 · 0 评论 -
51nod 1561 另一种括号序列 单调队列+hash+二分
题意有一个括号序列,可以对其进行两种操作: · 向里面加一个括号,可以在开头,在结尾,在两个括号之间加。 · 对当前括号序列进行循环移动,即把最后一个括号拿到开头来。 上述两种操作可以做任意次,要求添加最少的括号使得原序列变成一个合法括号序列。如果有多种可能,输出字典序最小的那一个。”(” < “)”。 len<=1000000分析假设左括号数量A大于右括号数量B原创 2017-10-24 21:43:12 · 453 阅读 · 0 评论 -
bzoj 4598: [Sdoi2016]模式字符串 点分治+hash
题意给出n个结点的树结构T,其中每一个结点上有一个字符,这里我们所说的字符只考虑大写字母A到Z,再给出长度为m的模式串s,其中每一位仍然是A到z的大写字母。Alice希望知道,有多少对结点u,v>满足T上从u到V的最短路径形成的字符串可以由模式串S重复若干次得到?这里结点对u,v>是有序的,也就是说u,v>和v,u>需要被区分.所谓模式串的重复,是将若干个模式串S依次相接(不能重叠).例如当S原创 2018-01-19 21:12:49 · 381 阅读 · 0 评论 -
bzoj 4755: [Jsoi2016]扭动的回文串 manachar+hash+二分
题意JYY有两个长度均为N的字符串A和B。 一个“扭动字符串S(i,j,k)由A中的第i个字符到第j个字符组成的子串与B中的第j个字符到第k个字符组成的子串拼接而成。 比如,若A=’XYZ’,B=’UVW’,则扭动字符串S(1,2,3)=’XYVW’。 JYY定义一个“扭动的回文串”为如下情况中的一个: 1.A中的一个回文串; 2.B中的一个回文串; 3.或者某一个回文的扭动字符串...原创 2018-03-29 21:55:38 · 286 阅读 · 0 评论 -
Codeforces 464E The Classic Problem 最短路+可持久化线段树+hash
题意有一个n个点m条边的无向图,每条边形如(u,v,w),表示u到v有一条长为2w2w2^w的边,问两点间的最短路。 n,m,w≤105,n,m,w≤105,n,m,w\le10^5,分析直接上dij,考虑用可持久化线段树来维护到每一个点的最短路的01串。 如果要比较两个串的大小时,就对线段树每个节点维护一个hash值,然后找到从高位到低位的第一个不同位即可。 当要加入一个1...原创 2018-04-08 15:15:12 · 546 阅读 · 0 评论 -
bzoj 2258: pku2758 Checking the Text 文本校对 hash+二分
题意为了给Wind买生日礼物,Jiajia不得不找了一份检查文本的工作。这份工作很无聊:给你一段文本 要求比对从文本中某两个位置开始能匹配的最大长度是多少。但比无聊更糟糕的是,Jiajia的经理 还可能往文本里面插入一些字符。 Jiajia想用一个程序来解决这些繁琐的工作。这个程序的速度要足够快,因为Wind的生日就快要到了 Jiajia必须赚到足够多的钱,也就是处理足够多的文本。原创 2017-10-10 08:49:54 · 324 阅读 · 0 评论 -
bzoj 3197: [Sdoi2013]assassin 树哈希+树形dp+费用流
题意给定一棵树和两组权值,求第一组权值最少改变多少个之后这棵树经过重标号之后与第二组权值相同。 n<=700分析我们可以按照3162的套路来搞,以树的重心作为根。而如果有两个重心的话就新建一个节点作为根。 设f[x,y]表示以x为根的子树最少需要需要多少步操作使得其与y为根的子树权值相同,且满足x的子树与y的子树是重构的。 因为树x与树y是重构的,所以它们的所有子树的形态也都是一样的。那么我们原创 2017-10-07 16:56:46 · 386 阅读 · 0 评论 -
bzoj 2081: [Poi2010]Beads 哈希
题意Zxl有一次决定制造一条项链,她以非常便宜的价格买了一长条鲜艳的珊瑚珠子,她现在也有一个机器,能把这条珠子切成很多块(子串),每块有k(k>0)个珠子,如果这条珠子的长度不是k的倍数,最后一块小于k的就不要拉(nc真浪费),保证珠子的长度为正整数。 Zxl喜欢多样的项链,为她应该怎样选择数字k来尽可能得到更多的不同的子串感到好奇,子串都是可以反转的,换句话说,子串(1,2,3)和(3,2,1)是原创 2017-03-22 21:13:24 · 385 阅读 · 0 评论 -
bzoj 2085: [Poi2010]Hamsters hash+倍增floyd
题意给定n个长度总和不超过10W的字符串,求一个最短的母串,使所有字符串的出现次数之和=m 这n个字符串保证不互相包含分析一开始题目没有给出字符串总长,以为就是AC自动机上dp+矩阵乘法随便优化一下就好了。。。既然不能对长度和字符集dp,那我们就可以考虑对字符串dp。 设f[i,j]表示j接到i后面最少增加多少个字符。 看到m辣么大,很容易想到倍增,那我们就可以用f[i,j,k]表示i后面接长度原创 2017-05-16 09:01:05 · 336 阅读 · 0 评论 -
bzoj 2795: [Poi2012]A Horrible Poem hash
题意给出一个由小写英文字母组成的字符串S,再给出q个询问,要求回答S某个子串的最短循环节。 如果字符串B是字符串A的循环节,那么A可以由B重复若干次得到。 n<=500000,q<=2000000分析一开始啥都想不到,然后才发现原来正解就是暴力。对于每一个区间,设其长度为len,其循环长度一定为n的约数。那么我们可以枚举循环节长度,是否是循环节的话就可以用hashO(1)判断了。 问题是这样比原创 2017-05-16 17:44:54 · 642 阅读 · 1 评论 -
bzoj 3916: [Baltic2014]friends hash
题意有三个好朋友喜欢在一起玩游戏,A君写下一个字符串S,B君将其复制一遍得到T,C君在T的任意位置(包括首尾)插入一个字符得到U.现在你得到了U,请你找出S. 2<=N<=2000001分析直接hash然后枚举位置就好。 注意题目要找的是本质不同的s,若s相同位置不同也只算一个。代码#include<iostream>#include<cstdio>#include<cstdlib>#in原创 2017-07-15 07:35:21 · 777 阅读 · 0 评论 -
51nod 1676 无向图同构 hash
题意如果一个无向图重标号后与另一个无向图完全一致(即对于任意两点,他们之间的边在两个图中都存在或都不存在),则称两个无向图同构。 给定两个n个点m条边的无向图,判定两个无向图是否同构。 n<=200,m<=4000分析初始时设每个点为点权为1,之后进行n次迭代,每次迭代每个点的值更替为与其相邻的点和他本身上一次迭代后的权值排序后计算出的hash值。 如果两个无向图同构则n次迭代后,所有权值排序原创 2017-08-17 16:16:40 · 1303 阅读 · 0 评论 -
bzoj 4936: [Ceoi2016]match hash+构造
题意给你一个由小写字母组成的字符串s,要你构造一个字典序最小的(认为左括号的字典序比右括号小)合法的括号序列与这个字符串匹配,字符串和括号序列匹配定义为:首先长度必须相等,其次对于一对匹配的左括号和右括号i,j,必须有s[i]==s[j]。无解输出-1 n<=100000分析一道脑洞比较大的题。设f[i,j]=0/1表示[i,j]这一段是否能组成一个合法的括号序。 首先考虑如何判-1。我们可以把原创 2017-09-17 20:42:48 · 822 阅读 · 0 评论 -
bzoj 3162: 独钓寒江雪 树哈希+树形dp
题意给出一棵无标号无根树,问本质不同的最大独立集数量。答案模1e9+7。 n<=500000分析对于一般的情况,我们可以先找出树的重心作为根,然后进行树形dp。这样做有什么好处呢?通过根的性质不难发现以一个点为根时它父亲所在的子树肯定不会跟它的其他子树同构。那么就可以愉快的进行树形dp了。 十分显然的最大独立集求法:f[i,0/1]表示是否选i的最大独立集。 对于它的所有子树,把所有同构的分别原创 2017-09-28 21:39:40 · 340 阅读 · 0 评论 -
bzoj 4298: [ONTAK2015]Bajtocja hash启发式合并
题意给定d张无向图,每张图都有n个点。一开始,在任何一张图中都没有任何边。接下来有m次操作,每次操作会给出a,b,k,意为在第k张图中的点a和点b之间添加一条无向边。你需要在每次操作之后输出有序数对(a,b)的个数,使得1<=a,b<=n,且a点和b点在d张图中都连通。 1<=d<=200,1<=n<=5000,1<=m<=1000000...原创 2018-07-08 18:42:55 · 392 阅读 · 0 评论