- 博客(8)
- 资源 (5)
- 收藏
- 关注
原创 线性筛详解
线性筛可以做到 O(n)的复杂度筛出所有素数。其基本原理:任何合数都能被表示成一系列素数的积。如果你了解了 O(nlogn) 的 Eratosthenes 筛法,你就会发现其实每个数都会被多次筛到。本算法保证每个合数只会被他的最小素因子筛到一次,所以可以做到线性复杂度。详解见代码,这样是可以保证每个数仅被筛到一次的。const int N = 10000;int lp[N],primes[N],pcnt;//lp[i]:i 的最小素因子//pcnt:记录多少个素数//prime
2022-03-20 11:56:10
1599
1
原创 3.20模拟
咕咕咕以后一定好好看题(惨痛的教训(T1因为根之间相差大于等于1,所以我们可以枚举长度为1的区间,然后就是浮点数的二分查找,设个eps精度限制就行#include<cstdio>#include<queue>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cctype>#incl
2022-03-20 11:43:11
147
原创 【无标题】
今天终于弄明白了lemon评测的文件格式!T1经典的一道题,贪心:对于第一个元素,只能由第二个元素给他,给完之后,第二个元素就变成了第一个元素,一直循环下去就行#include<cstdio>#include<queue>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cctype>
2022-03-17 21:41:00
97
原创 manacher (马拉车算法)(最长回文)
该算法用于线性求解最长回文子串例题该算法核心有两点,一个是我们维护的 数组,一个是我们记录的当前最右侧的回文串。 数组: 代表的是 位置所能扩展到的最大的回文串的半径,包含中心点。注意这样的话会出现一个问题,如果是偶回文串呢?所以我们要进行一个处理~|A|B|C|C|B|A|也就是说在字符间加上一个隔板 ‘ | ’从而使所有的回文串都是奇回文串,开头的 ‘~’ 我们可以忽略他,先不用管那么这个数组有什么用呢?考虑这样的情况:是之前找到的最靠右的回文串,是对称中..
2022-03-16 15:10:17
160
原创 并查集 按秩合并&路径压缩
并查集一种可以动态维护若干个不重叠的集合或无向图的连通块的数据结构。主要支持以下操作:find : 查询一个元素属于哪个集合merge : 合并两个集合并查集的每个集合都需要一个“爹”来表示这整个集合,所以判断两个元素是否在同一集合,就看他们爹是否相同。有一个显而易见的初始化,对于要维护的序列,初始每个元素的爹就是他自己,也就是初始化。inline void init(int n){ for(int i=1;i<=n;++i)fa[i] = i;}这里直接放
2022-03-15 09:38:37
806
原创 最小生成树 Prim & kruskal
最小生成树给定一个图用条边将点连起来,得到一颗边权之和最小的树。最小生成树有两种算法,用哪种取决于大小,边比较稀疏用完全图或者稠密图用Prim算法将图中的点分为两个集合一个表示在生成树中的点,一个表示不在生成树的点。开始所有点都在任选一个起点加入记录一个数组表示中的点到中的点的边权最小值,每次选值最小的点加入,直到得到生成树。复杂度inline void Prim(){ memset(dis,0x3f3f3f,sizeof(dis)); ...
2022-03-15 07:36:42
137
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人