返回顶部

随笔分类 -  algorithm

摘要:每次都去找想要的点,如果当前已经被占用了,那么标记一下,然后去找这个点的主人是否还有其他能连的点,若有,连这个点,然后当前的这个点就能连自己想要的点了 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cma 阅读全文
posted @ 2020-07-31 13:29 _Kolibri 阅读(159) 评论(0) 推荐(0)
摘要:感觉挺简单的,Prim和Dijkstra差不多,Kruskal搞个并查集就行了,直接上代码吧,核心思路都是找最小的边. Prim int n,m; int g[N][N]; int u,v; int dis[N]; bool st[N]; int prim(){ me(dis,INF,sizeof( 阅读全文
posted @ 2020-07-24 15:28 _Kolibri 阅读(134) 评论(0) 推荐(0)
摘要:最近公共祖先,顾名思义,就是在一颗树中,去找两个子节点的最近的公共祖先.这处理起来并不复杂,我们可以直接一个一个的暴力去 找,但基本上会TLE.所以我们可以用倍增法来处理LCA的问题. 倍增法:每次按$2$的倍数增大,即:$1,2,4,8,16,32.....$,有点类似二进制的枚举,而在当前处理的 阅读全文
posted @ 2020-07-23 10:41 _Kolibri 阅读(261) 评论(0) 推荐(0)
摘要:题意:有一张图,.表示白色,#表示黑色,每次可以将多行和多列涂成红色(也可不涂),问有多少种方案,使得剩下黑点的个数为$k$. 题解:又学到了新的算法qwq,因为这题的数据范围很小,所以可以用二进制枚举来将所以情况枚举出来. 关于二进制枚举:对于一个集合$n$,有$2n$个子集,而$[0,2n]$, 阅读全文
posted @ 2020-07-07 10:53 _Kolibri 阅读(506) 评论(0) 推荐(0)
摘要:选择某一个点开始,每次去找这个点的最短边,然后再从这个开始不断迭代,更新距离. 代码: 朴素(vector存图) #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm 阅读全文
posted @ 2020-06-28 20:20 _Kolibri 阅读(137) 评论(0) 推荐(0)
摘要:题意:给你$n$个数,每次可以使某个数++,--,或使某个数--另一个++,分别消耗$a,r,m$.求使所有数相同最少的消耗. 题解:因为答案不是单调的,所以不能二分,但不难发现,答案只有一个峰,所以我们可以三分高度,然后写个check函数贪心一下即可. 代码: #include <iostream 阅读全文
posted @ 2020-05-20 12:29 _Kolibri 阅读(153) 评论(0) 推荐(0)
摘要:题意:有一个长度为$n$元素均为$0$的序列,进行$n$次操作构造出一个新序列$a$:每次选择最长的连续为$0$的区间$[l,r]$,使得第$i$次操作时,\(a[\frac{l+r}{2}]=i\)(下取整),求$a$. 题解:刚开始我打算用归并分治的思想来写,但是发现左区间递归不到,然后就gg了 阅读全文
posted @ 2020-05-15 18:48 _Kolibri 阅读(126) 评论(0) 推荐(0)
摘要:问题 :对于一个字符串$s$,询问$q$次:字符串$t$是否为$s$的子序列. 题解 :我们记录一个位置$pos$,遍历$t$,在$s$中二分查找第一个下标大于$pos$并且等于$t[i]$的位置,更新$pos$. ​ 如果找不到直接标记一下即可. 代码 : 阅读全文
posted @ 2020-05-08 15:15 _Kolibri 阅读(133) 评论(0) 推荐(0)
摘要:之前学的时候忘了上传,补. 阅读全文
posted @ 2020-04-30 01:08 _Kolibri 阅读(327) 评论(0) 推荐(0)
摘要:1.扩展欧几里得算法 代码: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string.h> 5 #include <math.h> 6 #include <algorithm> 7 #incl 阅读全文
posted @ 2020-04-15 13:12 _Kolibri 阅读(195) 评论(0) 推荐(0)
摘要:1.快速幂 代码: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string.h> 5 #include <math.h> 6 #include <algorithm> 7 #include < 阅读全文
posted @ 2020-04-15 12:40 _Kolibri 阅读(277) 评论(0) 推荐(0)
摘要:1.欧拉函数 代码: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string.h> 5 #include <math.h> 6 #include <algorithm> 7 #include 阅读全文
posted @ 2020-04-15 11:56 _Kolibri 阅读(359) 评论(0) 推荐(0)
摘要:1.试除法求约数 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <stack> 7 #include <queue 阅读全文
posted @ 2020-04-06 10:12 _Kolibri 阅读(362) 评论(0) 推荐(0)
摘要:1.埃式筛选法 从2开始向后枚举每个数的倍数,将其筛选去除,e.g:(2,3,4........p-1)若这个区间里没有任何一个数的倍数是p,则p一定是质数 代码: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #i 阅读全文
posted @ 2020-04-05 00:39 _Kolibri 阅读(310) 评论(0) 推荐(0)
摘要:今天终于基本掌握了kmp(想在网上找好的学习资源真的不容易) 假如我们有一个字符串S和模板串P,我们想在S中找到和P一模一样的子串,这不难,我们直接暴力遍历即可,但这样做的时间复杂度是O(nm),所以为了优化这个问题,kmp就体现了它的优越性. 这里我推荐去看一个印度小哥讲解的视频,直接一点即通:h 阅读全文
posted @ 2020-02-29 13:35 _Kolibri 阅读(215) 评论(0) 推荐(0)
摘要:我们在理解stack和queue的基础上可以用数组来代替这两个容器,因为STL中的stack和queue有可能会导致程序运行起来非常的慢,爆TLE,所以我们使用数组来模拟他们,不仅可以更快,还可以让代码更加简洁 1.数组模拟stack #include <iostream> #include <cs 阅读全文
posted @ 2020-02-17 15:43 _Kolibri 阅读(384) 评论(0) 推荐(0)
摘要:链表一般分为两种:1)单链表 2)双链表,二者是及其相似的,但双链表有两个指针 1.单链表: //数组模拟链表(快) #include <iostream> #include <cstdio> #include <cstring> #include <string.h> #include <math 阅读全文
posted @ 2020-02-17 15:31 _Kolibri 阅读(165) 评论(0) 推荐(0)
摘要:高精度的运算主要依靠动态数组vector和字符串实现对每一位数字的运算. 1.高精度加法 #include <iostream> #include <algorithm> #include <vector> using namespace std; vector<int> add(vector<in 阅读全文
posted @ 2020-01-21 12:35 _Kolibri 阅读(170) 评论(0) 推荐(0)