摘要:
方法:桥 2015 WF的题,很巧妙,看过题解恍然大悟。这道题本质是将一个无向图的边用k种颜色染色,使得对于每一个环,这个环上每种颜色的边,数量相同。首先,我们说一个intuition,如果我们把每个环的长度都求出来并且求gcd,那么这个gcd应该是最大长度的倍数。 code: 1 #include 阅读全文
摘要:
方法:最小表示法 题意即求最小表示法,带入模版即可。 code: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <iostream> 5 #include <string> 6 #include 阅读全文
摘要:
方法:Manacher Manacher算法在O(length) 时间内求出各个回文子串的长度。O(length) 时间检查时那一种情况。 code: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include 阅读全文
摘要:
方法:最小表示法 题意及求一个string最小表示法的启示index。套用模版即可。 code: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <iostream> 5 #include <str 阅读全文
摘要:
方法:hash 二分 最优化问题转化为判定性问题。先预处理每个string的前缀hash,然后对于每组query,二分答案。当两个prefix 的hash value相同的时候,稳妥的方法是用O(prefix.length())的方法检查这两个prefix是否相同(1.430s); 本题采用 bkd 阅读全文
摘要:
方法:AC自动机 先把禁止的string插入ac自动机中,然后再这个自动机上求最长的合法路径。如果出现环或者最长路径长度为0,则输出“No";否则输出最长路径。 code: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 阅读全文
摘要:
方法:Trie 看了题解,有两种做法,大致是相通的。这道题重点在于如何判重。 建立两个trie,取名prefix 和 suffix。把所有string插入第一个trie,每个节点就代表一种prefix。同理,把所有string反转之后插入第二个trie,每个节点就代表一个suffix。如果没有重复的 阅读全文
摘要:
方法:Hash 一定要好好读题,原题的要求即让你判断一个string时候有两个长度大于3的回文substring,这两个substring可以相交但是不能包含另一方。 一个很重要的observation是我们只需要找长度为3 或者长度为4的回文substring即可(贪心),可以证明, 找长度更长的 阅读全文