POJ
alpc_qleonardo
这个作者很懒,什么都没留下…
展开
-
POJ 2763 Housewife Wind (LCA+线段树)
好久没有做树的题了…… 这题就是一棵树,给出两种操作,一是求两点最近距离,二是修改对应边的权值(是修改而不是更新)。 其实呢,这题用很多方法都可以做,什么树链剖分、LCT都行,但是我还是用了线段树,一是最近这个模板用的比较熟悉,而是练练LCA的写法。具体的话,首先在LCA预处理的时候,顺便把每个点的dfs序给求出来。之后求出被修改边的改变量,对其子树的所有点区间增加这个改变量,就达到了这个要求。求最短路的时候,直接d[x]+d[y]+d[lca(x,y)]即可。原创 2017-07-21 19:56:26 · 438 阅读 · 0 评论 -
POJ 3693 Maximum repetition substring(后缀数组+RMQ)
此题也是一道非常之巧妙的后缀数组题目。 大致题意,就是求一个字符串的最多连续出现的子串,即一个子串,可以分成最多个相同的循环节的组合。 对于本题,我一开始有一个想法,根据之前做题累积的经验套路,我们可以枚举重复次数,然后再枚举一个开始节点,求区间rmq,如果大于0,那么就是一个可能的解。但是显然这样子有重大的问题。首先,忽视了这个“连续”,求区间rmq可以求出出现至少k次的最大长度,但是这个出现k次并不一定是连续的。举个例子说,ababac,有后缀ababac、abac、ac原创 2018-03-03 11:24:15 · 265 阅读 · 0 评论 -
POJ 2778 DNA Sequence(AC自动机+矩阵快速幂+dp)
大致题意,与之前那道题目差不多,也是由指定的一些字母构成的字符串,不能够包换一些不合法的字符,再告诉你一个长度,问你一共有多少个合法的字符串。但不同的是,这道题目的长度可以很长。 上一道题目,我们介绍了用dp的方法去解决,但是这题面对这么长的长度,显然是不可取的。但是我们回顾一下上一道题目dp的过程,dp[i][j]表示到达AC自动机上的j点走了i步时的方案数,最后要求的是 Σdp[n][j],即到达每个合法点走了n步时的方案数总和。而在图论中,邻接矩阵的乘法、次方,恰好可以表示一个人在图中原创 2018-02-20 10:02:42 · 329 阅读 · 0 评论 -
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 · 458 阅读 · 0 评论 -
HDU 6212 Zuma ACM/ICPC 2017 Qingdao Online(区间dp)
Zuma游戏,相信大家都玩过,但是可能不知道它的名字罢了。 大致题意是每个珠子只有黑白两种颜色(其实多一点颜色也无所谓),然后一旦有三个及以上的同色珠子连在一起,那么就会自动消除同色的珠子。数据保证一开始没有三个连续的同色珠子,然后你每次可以选择一个颜色的珠子发射到任意位置,如果出现三同色那么消除,并且会发生连锁反应,问最后至少需要发射几个珠子才能使得所有珠子都被删除。 赛后才听说这是一道原题,POJ 2915,而且是弱化版本,那题是连续M个同色才能删除,而且不保证一开始没有原创 2017-09-18 18:14:05 · 688 阅读 · 0 评论 -
POJ 2480 Longge's problem(数论)
正如上一篇文章说的,这题就是求∑gcd(i, N)。 求这个正是很好很巧妙的利用了函数的积性。首先设g(x)=gcd(x,N),显然g(x)是具有积性的,那么根据定理,g(x)的和f(N)也是具有积性的。所以如果对于一个数字n,有n=p1^a1*p2^a2*p3^a3……pi^ai,那么f(n)=f(p1^a1)*f(p2^a2)*f(p3^a3)*……f(pi^ai)。现在的关键就是如何求每一个的f(pi^ai)。根据上一篇文章讲的,∑gcd(i, N)=∑dφ(N/d)。那么可以写成f(原创 2017-09-08 21:47:26 · 199 阅读 · 0 评论 -
斜率优化dp初探
可以说,dp是一个庞大的世界,这个从我刚接触dp的时候,我的老师就是这么告诫我的。事实也正是如此,dp模型变化多端,各种优化也是层出不穷。 斜率优化就是dp的一种优化,它基于数形结合的原理,把dp问题利用图像中的斜率进行加速,配合使用单调队列,可以把时间复杂度从O(N^2)降到O(N)。 这种优化方法也是非常常用的一种方法,在比赛中也比较常见。希望能够好好掌握……原创 2017-04-05 13:12:45 · 993 阅读 · 3 评论 -
矩阵(matrix)应用大总结(一)WOJ 642 Lost In WHU + POJ 3233
这篇绝对是干货! 矩阵、矩阵乘法是线性代数中最基本的东西,然而却在ACM竞赛以及各个领域发挥着不可替代的作用。 好了不装逼了。矩阵可以说在很早的时候就被动的遇到过了,但是一直没有做一个系统的总结。只是简单的知道有矩阵快速幂,然后线性递推可以利用矩阵乘法加速。但是这些的具体原理也不是非常的理解。知道最近几个月,实在遇到了很多用矩阵的题目,不得不系统的学习一下。原创 2017-05-11 00:45:52 · 592 阅读 · 0 评论 -
POJ 1185 炮兵阵地(状态压缩dp)
dp好难啊~~ 第一次一天的进度这么慢……dp果然学得很不好…… 这题的话还是很明显的状态压缩dp的,因为改好总共最多只有10列,故每一行只需要用一个10位的二进制数字表示是否放了炮兵即可。但是此题的关键不是这个,此题炮兵的打击范围是两格,这就意味者,第i行的状态与第i-1行和第i-2行都有关。如此一来,按照正常的dp方式,转移方程为:dp[i][j][k]=max(dp[i-1][k][l])+p[j]。其中dp[i][j][k]表示第i行状态j且第i-1行状态为k时的炮兵原创 2017-07-22 22:48:18 · 278 阅读 · 0 评论 -
POJ 3415 Common Substrings(后缀数组+单调栈)
非常有意思的而且巧妙的一道题目,其实更多的是考思维。 大致题意,给你两个字符串,问你在这两个字符串中,有多少个长度大于k的公共子串,这里重复的要多次计算。 对于多个字符串的题目,为了用上后缀数组,通用的做法是把几个字符串用一个没有在任何一个串中出现的字符连接起来,之后再用后缀数组。这题显然也得先这样,然后根据height数组进行分组。对于height大于等于k的,显然可能是一个公共子串。现在就来考虑如何统计个数。最暴力的方法当然是直接枚举,枚举A中的一个后缀和B中的一个后缀,然原创 2018-03-05 16:07:28 · 266 阅读 · 0 评论