![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法笔记
与君初相识,犹似故人归。
Missヾaurora
想将岁月凝结成诗,却没想过,有一天,这诗也会渐渐老去,以致后来,无人问津。
展开
-
chapter §31 并查集
#include <iostream>#include <set>using namespace std;const int MAX = 10;int father[MAX];//father[i]表示元素i的父结点bool flag[MAX] = {false};int count = 0;void initUFS() { //初始化 for (int i = 1; i <= MAX; ++i) { father[i] = i; .原创 2021-06-21 18:04:05 · 92 阅读 · 0 评论 -
组合数问题
一、求n!中质因子p的个数一般而言,可通过枚举1~n当中所有的数,分别计算每个数当中所含有质因子的个数,然后将结果进行累加。可得到一个O(nlogn)的算法。为了提高效率,我们可以观察1* 2* 3* 4* 5* 6……*n * n-1 * n,如果要求某一质因子,比如2的个数,只需依次计算含2的因子,2 ^ 2的因子,2 ^ 3的因子……然后分别将他们的个数相加即可。观察可发现,它们各自的个数恰好为n/2,n/2 ^ 2, n/2 ^ 3 ……因此便有了如下算法。1、递归写法//递归写法in原创 2021-05-14 17:15:59 · 211 阅读 · 0 评论 -
大整数的运算
两个大整数(如位数超过1000)的四则运算,显然不能按照普通的运算法则来计算,我们需要声明一个数组来保存每个整数,并且记录长度,即位数。数组中的每一个元素便对应整数当中的每一位,并且数组要提前初始化为0。在存每个数的时候按高位对应数组的高地址,低位对应低地址,即逆向存储。然后按运算法则对数组中的每一个元素即每一位进行运算。注:为了方便起见,在读入大整数时将其以字符串的形式读入,然后再将其转换为int型存入数组一、大整数定义const int MAX = 1000;//最大长度typedef st.原创 2021-05-13 14:58:35 · 712 阅读 · 0 评论