摘要:
题解见:http://blog.csdn.net/qpswwww/article/details/44407371收获: 1、对于一个问题,看似不可做,但一定存在一定特点,我们要做的就是找出一些特点(比如最有解有什么特点,怎样做会尽可能优),尝试强化(加更多的限制)或弱化(减少一些限制)问题看会出... 阅读全文
摘要:
题意:给定一个串,和一个数c,求一个长度最大的公共子串(可以重叠),并且该公共子串出现次数大于c。题解见罗穗骞论文。收获: 计算高度函数时,遇到rk[i]==1的点时,要将k设置成0。(k是"h[i-1]-1")。 1 #include 2 #include 3 #include 4 #de... 阅读全文
摘要:
题意:给出一个串,求两个不相交的长度相等的子串,使得对应位置的差相等。题解:首先,假设串是a[0],a[1],...a[n],先作差,即a[1]=a[1]-a[0],a[2]=a[2]-a[1],a[i]=a[i]-a[i-1],然后我们求a[1],a[2],a[3],...a[n]的两个不相交的公... 阅读全文
摘要:
第一道后缀数组后缀数组要维护三个数组:sa(suffix array), rk(rank)和ht(height)。含义分别是:sa[i]:将后缀按照字典序排序后,第i大的后缀的起始位置。rk[i]:起始位置为i的后缀的排名。ht[i]:起始位置为i的后缀与排名为rk[i]-1的后缀的最长公共前缀。对... 阅读全文
摘要:
较水的网络流。 1 /************************************************************** 2 Problem: 1779 3 User: idy002 4 Language: C++ 5 Result... 阅读全文
摘要:
收获:树上直径一定包含深度最深的点。然后O(nlogn)暴力。 1 /************************************************************** 2 Problem: 1776 3 User: idy002 4 Languag... 阅读全文
摘要:
这是一道环上的问题,我们先将一个环展开,再复制一次。这样,任何一个合法方案一定对应在转换后的序列的一些连续的区间,使得它们的并的长度大于等于圈长。然后,我们将区间合并一下(就是将一些被其他区间包含的区间去掉)。假设某个答案的区间是r1,r2,r3,...rk,我们可以让ri为"与ri-1连接的右端点... 阅读全文
摘要:
对于关系,看其是否是“等价关系”,即满足:自反,传递,对称。如果是可以用并查集来连接等价类。这道题是求原图补集的联通快个数,考虑原图度最少的点(由鸽巢原理,最多为2*e/n个)。先将未与其连边的点并在一个集合中,然后再用剩下的点暴力,每次O(n),最多暴力O(2*e/n)次,所以总的复杂度是O(e)... 阅读全文
摘要:
dp[i][j] 表示,在AC自动机中,从根节点开始,走了i条边,并且经过的点不包含危险节点,走到了j节点的路径数。收获: 1、正难则反 2、一个字符串不包含给定pattern中的任何一个,则该字符串在AC自动机上走时不会走到“危险节点”。 3、DFS可以做的事情,可以考虑DP来做。 1 #i... 阅读全文
摘要:
收获: 1、AC自动机可以在建立fail时将一些不存在的儿子指针指向对应的位置。 2、判断环时不要想当然地写个这样的版本:bool dfs( int u ) { if( vis[u] ) return true; vis[u] = true; for( int t=0; t11... 阅读全文