摘要: 给出一个字符串,每次询问一个区间[l,r]中有多少个不同的字串。对于每个区间建立后缀自动机,对每个节点i,设其父节点为j,该节点表示的字串个数为 (i->ml)-(j->ml) 。考虑到询问较多,而自动机默认支持在最后增加节点,对询问区间离线处理,对每个左区间建立后缀自动机。每次询问O(n)扫描自动机统计即可。#include #include #include #include #include using namespace std; const int MAXN = 2010;struct sanode{ sanode* ch[26]; sanode* f; int ... 阅读全文
posted @ 2013-09-24 13:27 qinhang3 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 给出一个凸多边形,和一些墙壁阻挡,求被阴影覆盖的凸多边形的长度。对墙壁进行离散化,计算出角度(atan2)排序后进行区间合并。然后分别计算出每个区间造成的阴影部分的长度,最后相加即可。注意计算阴影部分于多边形的交点时,朴素的o(n)算法会导致TLE。可以用二分去优化。#include #include #include #include #include using namespace std; #define mp make_pair const int MAXN = 100010;const double PI = 3.141592653589793238462643383... 阅读全文
posted @ 2013-09-24 13:23 qinhang3 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 给出字符串A和B。求A的不包含B的不同字串的数量。解法。。字符串匹配+后缀数组。任何字串都会是某个后缀的前缀对字串A建立后缀数组对于排名第k的后缀 SA[k] 将会提供L-SA[k]+1个字串 其中有height[k]个前缀在之前计算过所以每个后缀提供的新字串个数为L-SA[k]+1-height[k]下面考虑不能包含B。对A,B做一次匹配。找出B在A中出现的位置。设为p1,p2,p3...pn;对于排名第k后缀SA[k],其左边界为SA[k],右边界于与边界之间不能包含B。即右边界为大于SA[k]的第一个pi+length(B)-2.预处理出对于每一个左边界对应的最大合法长度MR[k]则对于 阅读全文
posted @ 2013-09-24 13:17 qinhang3 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 两道最小树形图。所谓最小树形图指的是有向图的最小生成树。参考了多位大神的博文终于自己写出来了。。有向图的最小生成树指的是在给定的有向图上找到一个子图点集与原图相同。边集是原边集的子集。有定根的生成树指的是规定某个点为生成树的根,向外延边扩展形成生成树。算法名字叫做刘朱算法。复杂度是O(VE)参考博客http://www.cppblog.com/RyanWang/archive/2010/01/25/106427.aspx1380是很明显的最小树形图题目,直接对给定有向图求树形图即可。模版题实现起来还是有很多要注意的细节。。#include #include #include #include 阅读全文
posted @ 2013-09-24 13:14 qinhang3 阅读(265) 评论(1) 推荐(0) 编辑
摘要: 题意为一只猴子随机输入字符串,每个字母的概率已经给出。求猴子输入长度为N的字符串S1包含模式串S2的概率。很有趣的KMP题目,在Matrix67博客里看过类似的文章,一下子就想起来了。http://www.matrix67.com/blog/archives/366博客里应该说的很明白了。一个利用next数组进行dp的过程。dp[i][j]表示输入第i个字符模式串匹配到第j个字符的概率。然后从上往下dp。。O(n)的状态转移对于每个状态,枚举下一个输入的字符c,设概率为pkmp中,母串每后移一个字符,模式串指针的位置仅由新字符决定。可以根据kmp匹配过程计算出新的j的值。设为j2则dp[i+1 阅读全文
posted @ 2013-09-24 13:11 qinhang3 阅读(650) 评论(0) 推荐(0) 编辑
摘要: 给出至多10个字符串。。长度不超过10。。且字符串均由ATCG四个字母组成。构造一个长度为L的串。使给出的字符串均不是它的字串。求方案数。对给出的字符串构造AC自动机。然后在AC自动机上进行DP。。对于ac自动机,每输入一个字符。其对应自动机上的结点也发生移动。f[i][j]表示第i个字符之后位于自动机上第j个结点。f[i][j]=k0*f[i-1][0]+k1*f[i-1][1]+k2*f[i-1][2]+......由于L太大。构造矩阵后用矩阵快速幂求解。(具体看这里http://blog.henix.info/blog/poj-2778-aho-corasick-dp.html)#inc 阅读全文
posted @ 2013-09-24 13:06 qinhang3 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 题意与poj2778类似,给出禁止出现的字串,求构造长度为L的字符串的方案数。AC自动机+DP题目没有要求结果取模。所以需要使用高精,于是写了java输入字符可能包含不可见字符。。java中的char和C中的char不一样。。。。java写AC自动机写丑了。。。 = =。。由于L不大。所以直接dp就可以了。dp方程:http://blog.henix.info/blog/poj-2778-aho-corasick-dp.htmlimport java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamR 阅读全文
posted @ 2013-09-24 13:01 qinhang3 阅读(172) 评论(0) 推荐(0) 编辑