- 博客(50)
- 收藏
- 关注
原创 欧拉 函数
互质是公约数只有1的两个整数,叫做互质整数。公约数只有1的两个自然数,叫做互质自然数,后者是前者特殊情况。1和-1与所有整数互质,而且它们是唯一与0互质的整数1)两个不同的质数是互质的。2)较大数是质数的两个数是互质数3)相邻的两个自然数是互质数4)相邻的两个奇数是互质数5)最大公约数是1,两个数互质一种是这些成互质数的自然数是两两互质的。如2,3,5一种不是两两互质的,如6,8,9。
2024-08-31 20:43:31
475
原创 归并 排序
因为指针i和指针j永远指向的是下一个要进行比较的元素,也就是说,当前i和j指向的数是还还没有比的数,因此如果的话,当i = mid 或 j = r时,循环就会退出,而q[mid]和q[r]还没有比较,因此需要让,这样就不会漏掉q[mid]和q[r]的比较。
2024-08-31 14:58:37
861
原创 最大公约数(欧几里得算法)
那么此时左边的数就是一开始要求的两个数的最大公约数。,这样一直缩小小括号右边的数字,直到这个右边的数字为。,就是一开始要求的两个数的最大公约数。,输出小括号左边的数字。判断小括号内右边的数字。
2024-08-29 13:50:40
260
原创 筛质数(线性筛法)
假设有一个非质数,那么这个数可以被表示为一个最小质因数和一个因子相乘的形式如,那么就是的最小质因数,就是另一个因子线性筛法就是利用每个数的最小质因数筛掉这个非质数,如12就要用2筛掉,18就要用3筛掉step1:遍历之间的所有数,一是为了遍历之间的所有的质数,二也是为了找到和质数相乘的另一个数。step2:将质数(没有被筛掉的数就是质数)加入到数组中。
2024-08-28 18:01:22
897
原创 分解质因数
这个数的因数只有 1 和它本身,又被称之为素数:这个数的因数除了 1 和它本身,还有其他数任何一个合数都可以被分解为几个质数相乘的形式,这几个质数就被称之为这个合 数的质因数,如 12 =2* 2 * 3,那么 2 和 3 就是 12 的质因数分解质因数:给定 n 个正整数 ai,将每个数分解质因数,并按照质因数从小到大的顺序输出每个质因数的底数和指数。第一行包含整数 n。接下来 n 行,每行包含一个正整数 ai。
2024-08-25 16:47:07
584
原创 染色法判断二分图
如果某个图为二分图,那么它至少有两个顶点,且其。任何无回路的的图均是二分图。性质:(1)任何有奇数环(这个环的边数是奇数)的图都不是二分图(2)二分图中没有奇数环(3)任何无环图都是二分图(4)二分图都可以表示为类似于下面的形式。
2024-08-22 19:55:01
597
原创 dfs算法
直到找满了所有位置上的数字,开始一步步回头,直到除了上来的这条路还有路能再次往下走的情况,再次往下走,直到再次找满所有数字,再回头。,然后将对应位置上的数字设置为找到的数字,进入下一层的dfs,也就是寻找下一位的数字。给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。按字典序输出所有排列方案,每个方案占一行。遍历所有数字,找到当前还没有被占用的数字。共一行,包含一个整数 n。
2024-08-22 00:56:21
193
原创 Prim算法求最小生成树
因为本题中没有说明图中不包括负环,因此可能存在负的自环,而负的自环不是没有意义的,因此,不能直接将自环的边删掉。判断在现有集合之外是否还有结点与集合联通(第一次循环情况特殊处理)在结合中新增节点后,判断结点到集合的最近距离是否需要更新。在集合中新增距离找到的距离集合最近的点。找到不在集合中的距离集合最近的点。prim算法干的事情就是。
2024-08-21 00:08:02
1658
原创 spfa()算法(求最短路)
是对的优化,大部分求最短路问题都可以用spaf算法来求。如若图中有负权回路,不能用spfa算法,要用bellman_ford算法;若只有负权边,则可以用spfa算法Dijikstra算法适用于图中全都是正权边。
2024-08-18 16:43:39
485
原创 Dijikstra算法(堆优化版)
当给定数据的范围不大时,采用朴素Dijikstra算法尚能ac,但若是数据范围大于10^5,那么朴素Dijikstra算法就会爆掉,所以我们需要采用主要是对朴素Dijikstra中找寻从距离编号 1 结点路径长度最近的结点的过程进行了优化:这段代码的详解请看。
2024-08-17 01:33:11
795
原创 树的重心(深度优先遍历)
先看题目:给定一颗树,树中包含 n 个结点(编号 1∼n)和 n−1 条无向边。请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。第一行包含整数 n,表示树的结点数。接下来 n−1 行,每行包含两个整数 a 和 b,表示点 a 和点 b 之间存在一条边。输出一个整数 m,表示将重心删除后,剩余各个连通块中点数的最大值。题目比较阴间,我们先翻译一下。
2024-08-13 21:55:29
513
1
原创 树和图()
1. 图的遍历(因为树可以理解为是特殊的图,因此这里不考虑树的遍历,只考虑图的遍历)1. 图的遍历(因为树可以理解为是特殊的图,因此这里不考虑树的遍历,只考虑图的遍历)给定一个具体的图,便于分析下面是树的结构。
2024-08-13 12:23:43
282
原创 食物链(并查集)
并查集先上题目:动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。A 吃 B,B 吃 C,C 吃 A。现有 N 个动物,以 1∼N 编号。每个动物都是 A,B,C 中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这 N 个动物所构成的食物链关系进行描述:第一种说法是1 X Y,表示 X 和 Y 是同类。第二种说法是2 X Y,表示 X 吃 Y。此人对 N 个动物,用上述两种说法,一句接一句地说出 K 句话,这 K 句话有的是真的,有的是假的。
2024-08-08 22:04:33
703
原创 Trie树算法(采用二维数组模拟)
idx是一直自增长的,所以说,不同的字符占用的下标一定不一样,这句话很重要,举个例子细细体会一下,假设’abcdg’和’abcef’,’abc’是相同的,所以下标在son里都是一样的,但是’d’和’e’两个字符不相同,必然导致idx会自增长,所以’d’和’e’在son[c]这26个下标处必然处于不同的位置,这就实现了’c’同时指向’d’和’e’两个字母了。表示的是字符串最后一个字符时,那么按照道理说其中存储的就是下一个字符的位置,那么应该不存在,但是在插入操作中,给这个。能够方便的插入和查询字符串。
2024-08-06 14:05:59
289
原创 模拟 栈
实现一个栈,栈初始为空,支持四种操作:现在要对栈进行 𝑀 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。1.Push函数(插入元素功能)就是在e[]中插入一个新的元素。就是相当于栈顶减一。如果此时栈顶不为0,说明栈里面有元素。返回栈顶元素。对于队列,最经典的题目就是滑动窗口。给定一个大小为 n≤1000000 的数组。有一个大小为 𝑘 的滑动窗口,它从数组的最左边移动到最右边。你只能在窗口中看到 𝑘 个数字。每次滑动窗口向右移动一个位置。以下是一个例子:
2024-07-26 13:57:03
642
原创 双链表(采用数组模拟实现)
int idx;和单链表一样,还是先定义e[i],用来存储下标为i的结点的值。定义l[i],可以理解为一个函数,返回下标为i的结点的左边的结点的下标。定义r[i],理解为一个函数,返回下标为i的结点的右边结点的下标。定义idx,代表当前操作的结点的下标,如现在想要插入一个结点,idx就代表这个结点的下标(也可以理解为结点本身)
2024-07-25 16:42:46
482
原创 单链表(采用数组模拟实现)
e[idx] = x;head = idx;idx++;画张图更好理解还是画张图注意:代码中的k代表元素的下标,图中的也是,第k个插入的元素对应的下标应该是k-1。e[idx] = x;ne[k]= idx;idx++;还是画图注意:代码中的k代表元素的下标,图中的也是,第k个插入的元素对应的下标应该是k-1。
2024-07-24 12:33:07
442
原创 位运算(常用的两种用法)
如当x = 1010时,则lowbit(x) = 10;当x = 101000时,则lowbit(x) = 1000;下面是实现功能x& -x。
2024-07-22 11:46:34
325
原创 差分(对数组中指定的一段数加上某个指定的值)
因为我们只是希望在a数组中的l到r这一段加上c,如果只是在差分矩阵b中的b[i]加上c,则a[i]之后的元素都会加上c,所以还需要在b[r+1]段减去一个c,就能使a[r+1]之后的加上c被抵消。差分数组中有一个b[i]加上c,那么之后的a[j](j>i=)都会加上c。对于一个给定的数组a,可以将其理解为是另一个数组b的前缀和形式,也就是。当我们把b[i]加上c后,会发现a[i]之后的a[i]都会加上c,因为。此时b数组中的元素为{0,a[1],a[2]-a[1],a[3]-a[2],....}
2024-07-22 09:39:29
338
原创 前缀和算法
因此代码中的遍历填充记录输入数据的i需要从1开始遍历,这样可以有效避免后续迭代递归过程中的数组越界问题,如当i取0时,s[i-1]就会取到s[-1],产生数组越界。前缀和算法的主要递归公式为。
2024-07-20 23:35:28
179
原创 页面切换功能
/指针初始指向主菜单//主菜单界面函数//设置界面函数//游戏界面函数//败北界面函数//胜利界面函数//控制界面切换的函数,根据flag的值不同,进行界面的切换。cout << "请输入选项对应序号:" << endl << "1--进入游戏" << "2--进入设置" << "3--退出程序";int choose;case 1://因为controller中while无限循环,因此只要改变flag的值就可以实现界面之间的切换break;
2024-07-20 10:08:16
340
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅