摘要:
先给出公式 ans = n - LPS[n-1] 其中ans为最小周期,n为给出的由假设的周期字符串中提取出的子串长度,LPS为前缀函数,n-1为字符串最后的位置下标 证明如下 证明ans = n - LPS[n-1],思路: (1) 证明特殊情况,即先对完整周期字符串进行证明,这时候的字符串组成是 阅读全文
摘要:
本题模板为奇偶最短路(边权为1时的),题目链接:https://www.luogu.com.cn/problem/P3556 为了研究,码了三种不同最短路解放的奇偶做法,便于不同群体理解. 一:BFS,对于边权为1,求最短路当然是BFS最快了,时间复杂度:o(nm),代码如下: 点击查看代码 //背 阅读全文
摘要:
背景:说实话,这题有点考建模思想,及对Dijkstra算法的理解 思路:因为转账间有手续费,即有一定损失比例,故边权均小于1(比例来说),而边的路权值非和,而是积,故边权相当于负(因为每次乘会使dis[i]变小) 而题目刚好求最大路,而边权又等价于全为负,不刚好是Dijkstra的逆运用吗? 原理: 阅读全文
摘要:
背景:本题为构造DAG题,给出了有向与无向边,CF2000分题目 思路:先处理有向图,判断是否有环,有就NO,否则一定有解. 我们思考一下有环的条件(或者说环在什么情况下产生):即后面的数指向前面的数才可能构成环,即拓扑序大的指回去了! 故得构造思路:即让无向边的拓扑序小的指向大的即不会产生环 细节 阅读全文
摘要:
背景:我自己思考想出来的图论题,总归是有成就感的 分析:求间接连接的点的对数,即一个连通块中枚举出两两连接的组合数,减去整个连通块中的边数,因为一条边必然直接连接了两个不同的点 原理:并查集 时间复杂度:o(n) 代码如下: 点击查看代码 #include <bits/stdc++.h> using 阅读全文
摘要:
归并排序是一种基于分治的算法,下面给出我的数组式(半数组,有偏移理解) 代码: 点击查看代码 //注意:我的答案数组下标开始为1,且所有操作区间均为闭区间 //时间复杂度:稳定o(nlogn) //空间复杂度:o(n),栈空间:o(nlogn),若开全局数组则可忽略栈空间 #include <bit 阅读全文
摘要:
第一种写法:定标杆在起点 时间复杂度:平均o(nlogn),最坏o(n^2) 代码如下: 点击查看代码 #include <bits/stdc++.h> using namespace std; void quick_sort(int a[],int b,int e) { if(b>=e) retu 阅读全文
摘要:
先来个朴素dp算法!见代码注释 点击查看代码 //原理:dp //时间复杂度:o(n^2),过不了本题 #include <bits/stdc++.h> using namespace std; int f[1001][1001];//dp数组,f[i][j]为处理了a的前i位,b的前j位得到的最长 阅读全文
摘要:
主要思想是树的重轻儿子之分使得时间复杂度为o(nlogn),神奇 欲深入了解的这里:https://oi-wiki.org/graph/dsu-on-tree/ 点击查看代码 #include <bits/stdc++.h> using namespace std; typedef struct e 阅读全文
摘要:
只能说比赛时前期做得太慢了,后面导致题目只能捞点分数(IOI赛制),当时这道题是我不剪枝DFS拿了4分,压线拿铜牌! 考完试一做,发现是个大水题(bushi) 主要原理:DFS(深度优先搜索) + 剪枝 名言:学搜索核心就是学剪枝 废话不说了,见代码 点击查看代码 //原理:DFS + 剪枝 #in 阅读全文