摘要:
题意:求n个串的字典序最小的最长公共子串。 解法:枚举第一个串的子串,与剩下的n-1个串KMP匹配,判断是否有这样的公共子串。从大长度开始枚举,找到了就break挺快的。而且KMP的作用就是匹配子串,近乎O(n)的速度,很快。 P.S.对于字符串要仔细!!! 阅读全文
摘要:
题意:给定一个由字符组成的矩阵,求出它的面积最小的覆盖矩阵。(感觉应该是可重叠的......* (・ω・)っ) 解法:KMP。行列互不影响,可以问题分解。先求出每一行的最小重复串,利用kmp中的next[ ]数组,然后求其最小公倍数。若变成最大值就可以break了,这也是我代码本来应该O(2*m*n 阅读全文
摘要:
题意:求子串在文本串中出现了多少次。 解法:使用KMP的next[ ]和tend[ ]数组计数。 阅读全文
摘要:
题意:给出一个字符串str,求出str中存在多少子串,使得这些子串既是str的前缀,又是str的后缀。从小到大依次输出这些子串的长度。 解法:利用KMP中next[ ]数组的性质,依次找到前缀、后缀匹配的字符串。 阅读全文
摘要:
题目:给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用。 解法:在Dinic的基础下做spfa算法。 阅读全文
摘要:
题目:给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内)。(N<=10000000,M<=100000) 解法:1.欧拉筛O(n),数组近乎100KB;2.(我这题copy了数据范围肯定是有原因滴......)欧拉函数判断素数O(m log n),m 比 n 小啊,可以 阅读全文
摘要:
题意:给你一个字符串,求这个字符串到第 i 个字符为止的重复子串的个数。 解法:判断重复子串的语句很重要!!if (p && i%(i-p)==0) printf("%d %d\n",i,i/(i-p)); 我之前一直不是很理解,而实际上多枚举几种情况就好了。若是重复的,那么next[i]肯定是最大 阅读全文
摘要:
题目:给出一个有向图,请输出从某一点出发到所有点的最短路径长度。 解法:spfa算法。 阅读全文
摘要:
题目:给出一个无向图,求出最小生成树,如果该图不连通,则输出orz。 解法:Kruskal求MST。 阅读全文
摘要:
题目:给出一个网络图,以及其源点和汇点,求出其网络最大流。 解法:网络流Dinic算法。 阅读全文
摘要:
题目:给定n*n的矩阵A,求A^k。 解法:利用矩阵乘法的定义和快速幂解答。注意用负数,但是数据太弱没有卡到我......(P.S.不要在 typedef long long LL; 前使用 LL......━━( ̄ー ̄*|||━━) P.S.在multi函数里,若将所有相乘的和先加起来不会爆 lo 阅读全文
摘要:
题目:给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 解法:倍增。 阅读全文
摘要:
题目:有n个同学(编号为1到n)正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学。游戏开始时,每人都只知道自己的生日。之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息, 阅读全文
摘要:
题意:已知一个数列,你需要进行下面三种操作:1.将某区间每一个数加上x;2.将某区间每一个数乘上x;3.求出某区间每一个数的和。 解法:(唉 :-(,这题卡住我了......)对于加法和乘法的混合操作,lazy 标记记为 add , mul。 我们可以把运算全部化为 x*mul+add*(r-l+1 阅读全文
摘要:
题目:已知一个数列,你需要进行下面两种操作:1.将某区间每一个数加上x;2.求出某区间每一个数的和。 解法:如题,模版题。需要加上 lazy 标记,也就是我的 upd。lazy 标记的思路就是对一个结点更新(算和)了,但不继续更新它下面的结点,而是标记下来(每个数需加上的值)。注意——边界判断,不能 阅读全文