自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

alpc_qleonardo

半退役状态

  • 博客(12)
  • 收藏
  • 关注

原创 后缀数组初学 + SPOJ DISUBSTR(模板)

后缀数组是我见过的这么多算法中,最晦涩难懂的一个之一。       他本是只是几个数组,严格意义上来说不能算是一个数据结构,只是他求出来的sa[]数组和height[]在字符串统计中非常的有用。其具体的用法就先不在这里说,本文只是介绍求解的方法,并给出模板。      首先,得介绍后缀数组是什么个东西。所谓后缀数组,顾名思义就是对于一个字符串,我求出他所有的后缀的一个排名,记录到sa...

2018-02-28 21:20:32 266

原创 CodeChef FAVNUM FavouriteNumbers(AC自动机+数位dp+二分答案)

好久没有写数位dp了,着实快忘记怎么写了…… 大致题意是,给你一些幸运数字,然后问你在一个区间内的第k大的,含有幸运数字的数是哪一个数字。 其实做法也很简单,这种类型的题目一看就知道是数位dp,然后求第k大,肯定是二分枚举这个数字,然后每次数位dp计算小于等于这个数字的范围内有多少个数字满足条件。关键就在于如何判定这个数字是否包含了幸运数字。而AC自动机正好可以解决这个问题,我们把所有的幸运数字加入到AC自动机中,然后我们同样在AC自动机上面dp。dp[len][pos]

2018-02-26 15:20:18 294

原创 HDU 3247 Resource Archiver(AC自动机+状态压缩dp+最短路BFS)

大致题意:给你一些合法字符串,和一些不合法串,现在要求你构造一个字符串,使得这个字符串包含所有哦的合法串,且不包含任何不合法串,而且长度最短。 这里了涉及到一个长度最短,可能就和之前的一些题目不同。我们注意到这个数据范围,合法串只有最多10个,所以状态压缩dp很容易想到。这里是求字符最短长度,如果把长度看做代价,很容易发现,此题和状态压缩的鼻祖 HDU 4568 很像。这题是要求你在一个矩阵中取10个以内的东西,每次走一步,问你最少需要走多少步能够取完所有的东西。今天这题则是构造字符串,要求

2018-02-25 10:00:29 372

原创 HDU 4057 Rescue the Rabbit(AC自动机+状态压缩dp)

大致题意,还是类似,给你一些字符串,这些字符串有相应的权值,只要包含某个字符串就要加上这个权值。然后同样也是A、T、C和G四个DNA,再告诉你一个长度,问你这个长度的所有字符串中,权值和最大能够到达多少。 一开始的想法还是和之前类似,我们之前有记录单词结尾,我们现在在记录单词结尾的时候把单词的权值也给记上,然后转移的时候,转移最大值。有转移方程dp[i][j]=max(dp[i][j],dp[i-1][x]+val[x]),这个val[x]包含的不止一个单词的结尾的权值,因为单词有相互包含的

2018-02-21 12:02:40 283

原创 POJ 2778 DNA Sequence(AC自动机+矩阵快速幂+dp)

大致题意,与之前那道题目差不多,也是由指定的一些字母构成的字符串,不能够包换一些不合法的字符,再告诉你一个长度,问你一共有多少个合法的字符串。但不同的是,这道题目的长度可以很长。 上一道题目,我们介绍了用dp的方法去解决,但是这题面对这么长的长度,显然是不可取的。但是我们回顾一下上一道题目dp的过程,dp[i][j]表示到达AC自动机上的j点走了i步时的方案数,最后要求的是 Σdp[n][j],即到达每个合法点走了n步时的方案数总和。而在图论中,邻接矩阵的乘法、次方,恰好可以表示一个人在图中

2018-02-20 10:02:42 342

原创 POJ 1625 Censored!(AC自动机+dp+高精度)

大致题意,给你n个字符,和一个长度m,所有的单词都由m个这些字符构成,于是总的单词数目为n^m。然后再给你一些单词(长度不一定是m),所有包含这些单词的单词都不算是合法的单词,现在问你总共有多少个合法的单词。 这种题目用dp的话还是挺明显的,但是普通的dp并不能够判断是否已经构成了合法单词,缺少判断的手段。于是只能借助于AC自动机。我们把所有给出的不合法单词构造AC自动机,当然要注意的是,对于fail指针,我们得做出一些修改。在Trie中,如果一个节点x无法到达字母a,但是它的fail能够到

2018-02-18 11:08:39 490

原创 CodeForces 933B A Determined Cleanup(数学推导构造)

当时想到了60%,然后想歪了,后来重新想了一下,直接就出来了,有点可惜…… 大致题意是,一个多项式函数f(x),系数为非负整数,然后可以拆成 f(x) = q(x)·(x + k) + pf(x)的形式,且q(x)也是一个多项式函数,但是系数没有要求。现在告诉你k和p,问是否存在这样一个f(x),且f(x)的系数小于k。 CodeForces的题目,看清楚题目条件很重要,题中又说f(x)的多项式的系数一定是非负整数,然后q(x)没有做要求。根据题意,我们把等式右边拆开,且f(

2018-02-15 14:40:28 572

原创 AC自动机初学(模板)+ HDU 2222

        AC自动机这个东西,听起来很高大上,在高中的时候不知道什么是自动机,以为写出了AC自动机就可以自动AC……        现在知道了它是用来解决字符串匹配问题的东西,说白了就是KMP+Trie。这个在去年暑假的时候,hc学长也略微提到过,但是没有具体的讲。        在解决只有一个模式串的匹配问题的时候,我们用朴素的KMP算法即可快速完成,但是,如果有很多个匹配串呢?这是就得用...

2018-02-14 19:37:38 267

原创 CodeForces 915F Imbalance Value of a Tree(并查集+树上统计)

CF的题真的好多都是纸老虎,知道方法后贼…… 大致题意是,给你一棵树,然后树上每个点都有一个点权,用I(i,j)表示i、j两点路径上面的最大值与最小值之差,然后让你求 首先,求这样一个和,肯定就是计算每一个点的贡献,计算每一个点作为最大值和最小值的次数,然后再统计。至于统计次数,很容易让人想到用树链剖分或者其他的一些复杂的数据结构,但是仔细想想却没那么好实现。 我们先来分析一下一些想法,以求最为最大值的次数为例。我们首先得从最大值开始,然后直接计算包含该点的路

2018-02-12 20:58:46 763 2

原创 CodeForces 915D Almost Acyclic Graph(拓扑排序)

这题居然是topsort…… 大致题意就是给你一个图,然后最短删除一条边,问你是否能够把这个图变成一个DAG有向无环图。 暴力的话枚举所有的边,然后再遍历图,复杂度为O(M*(N+M))果断超时。自己画出图来找一些环的个数以及相互之间的重边的关系,还是没有能够找到一个很好的规律。另一个方法就是,找出一个的环,然后标记环上的边,枚举这些边删掉,看是否还有环。但是这个操作起来不好处理,本身求具体的环就要用tarjan,然后还要在上面修改标记下环上的边…… 正解是,

2018-02-12 15:31:31 442

原创 CodeForces 919E Congruence Equation(费马小定理+逆元)

好久没有写博客了,之前呢因为考试月还有雅思耽搁了挺久的,今天正式复出。 这道题,如果是现在拿给我做,应该是可以拿下的,在经历了给大一培训的一段时间之后。这题其实和我找的某一道题目有点类似,都是用费马小定理。 我们可以把 n 表示为 n= i*(p-1)+j。如此一来等式就是 (i*(p-1)+j)*a^(i*(p-1)+j)≡b(mod p)。根据别的题的经验,利用费马小定理 a^(p-1)≡1(mod p),等式可以化为 (i*(p-1)+j)*a^j≡b

2018-02-11 20:21:03 402

原创 CodeForces 888G Xor-MST(Sollin MST+Trie)

标题都已经很明显了,一个最小生成树,只不过是用xor做。 通常来说xor的题目,要么是贪心,要么是用Trie去做,而这道题,显然要用到Trie。但是我们又如何做到求最小生成树呢?这里,我们发现求最小生成树有一个非常少见的算法——Sollin(Boruvka)算法。具体来说,就是一开始把每个点看成独立的连通分量,对于每个连通分量,每次操作找与其最近的连通分量合并,一直到只剩下一个连通分量为止。这样子最坏的情况是每次只减少一半的连通分量数目,最好的情况就直接和Prim算法相同。具体实现起来,可能

2018-02-11 18:57:58 481

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除