自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 算法——数学知识(质数,约数,欧拉函数,快速幂)

对于每一对约数,我们只需检验其中的一个。我们每次检查每对中较小的一个。在埃氏筛法中,合数可能被多次筛去。我们想要一个合数被筛掉一次,那么每次筛就要用最小质因数筛。由算数基本定理可知,大于1的正整数都可以被写成若干个质数相乘。有多少个素数,显然我们不能满意对所有小于等于。对于每一个合数,我们都用质数把它筛掉。时,由于我们是从小到大枚举的质数,所以。时,由于我们是从小到大枚举的质数,所以。另外,对于 C++17,我们可以使用。的质因数最多只有一个。我们每次使用最小质因数筛掉合数。由于因数是成对分布的,所以。

2024-12-06 01:31:33 228

原创 算法竞赛进阶指南——递归与递推

当向上回溯时,观察上图,我们发现在合并成区间[3, 8]的过程中,左边是有序的,右边是有序的。所以一个数在左半边,另一个数在右半边的逆序对的数量(如果可以形成),就是左半边区间从8开始到尽头的数量。对于一个数列,我们将它一分为二。这就像把一个问题拆成了两个同类的子问题,即左半边的序列的排序问题和右半边序列的排序问题。一个数列逆序对的数量等于左半边逆序对的数量加右半边逆序对的数量加一个数在左半边另一数在右半边逆序对的数量。其次,显然,左右两边是否排序不影响一个数在左半边,另一个数在右半边的逆序对的数量。

2024-12-01 16:22:17 572

原创 算法竞赛进阶指南——位运算

该编码按位取反后得到的编码~C表示的数值是。

2024-11-30 20:48:18 1010

原创 c ++零基础可视化——字符串

c ++零基础可视化——字符串string定义:string str1 = "012345"; // 012345string str2 = str1; // 012345string str3(6, '#'); // ######string str4("012345");

2024-11-28 19:44:15 416

原创 算法——滑动窗口

【代码】算法——滑动窗口。

2024-11-25 00:53:24 198

原创 c ++零基础可视化——高级输入输出

c ++零基础可视化——高级输入输出

2024-11-25 00:52:39 87

原创 c ++零基础可视化——vector

的人,先选出来的排在前面,后选出的排在后面。对题面的理解:每次选出的人都应该在第一个人的索引上加上k的倍数。启发:模拟题,题目不难,显然上面的代码精简。但我的方法很冗长复杂,究其原因还是没有熟练掌握vector的精髓之处。我与其对比,纵观我的代码,我总是想要存储数据,但这完全不必要。每次排出新的队伍,就保存在newNums中,再将新队伍newNums赋值给nums,最后将newNums清空。重新定义vector的大小。若比原先大,则用0填充新增的元素;本题面加深了我的理解力。这导致我的方法不够好。

2024-11-20 19:20:37 750

原创 c ++零基础可视化——数组

关于对加法的理解,一个人的编号加上2就是前进两个人。将 type T 的元素作为第一个参数,将 range 中的元素作为第二个参数的二进制运算,并返回一个可分配给 type T 的值。它包含 first 和 last 之间的所有元素,包括 first 指向的元素,但不包括 last 指向的元素。它包含 first 和 last 之间的所有元素,包括 first 指向的元素,但不包括 last 指向的元素。对数组的理解:和上面的方法相同,采用递推的方法求解阶乘并将其存储在数组中。序列中的初始和最终位置。

2024-11-17 21:14:39 852 1

原创 最短路板子及其应用

​ 我们注意到,每次找到不在集合中的点的时间复杂度最高。故我们才用小根堆,其可以有效解决这个问题。

2024-06-01 18:39:08 387

原创 拓扑排序板子及其应用

int n, m;#define N100010n和m分别表示图中的节点数和边数。N是预定义的常量,表示节点的最大数量。e 和 ne 是数组,用于存储图的边信息。e[i] 表示边的目标节点,ne[i] 存储与当前节点相连的下一条边的索引。h数组用于存储每个节点的边的开始部分,即每个节点的邻接表的头部。idx 是用于填充 e和 ne 数组的当前索引。d数组用于存储每个节点的入度。queue 用于实现拓扑排序的队列,head 和 tail 分别是队列的头部和尾部索引。

2024-05-12 19:09:01 376

原创 FloodFill算法及其应用

给定一个地形图,浅色表示洼地,深色表示高地。向这个图中的一个格子注水,随后询问这个格子的四个方向上的格子,显然,只有浅色的格子才可以被洪水覆盖,高低不会被覆盖。这个算法可以在线性复杂度内找到某个点所在的连通块。

2024-05-11 22:12:58 1613 1

原创 并查集的作用、原理、实现及应用

每个集合用一棵树来表示,树根的编号就是整个集合的编号。每个节点存储它的父节点,p[x]表示x的父节点。如何求x的集合编号:while (p[x]!= x) x = p[x] 优化:路径压缩。如何合并两个集合:px是x的集合编号,py是y的集合编号。p[px] = py。如何判断树根:if (p[x] == x) 除了根节点之外p[x]都不等于x。

2024-05-05 19:05:31 221

原创 二分(整数二分,浮点数二分)

当我们将区间[l, r]划分成[l, mid - 1]和[mid, r]时,其更新操作是r = mid - 1或者l = mid;,此时为了防止死循环,计算mid时需要加1。当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,其更新操作是r = mid或者l = mid + 1;,计算mid时不需要加1。

2024-05-05 17:13:24 311

原创 容斥原理及其应用

如果被计数的事物有A、B两类,则A类和B类元素的总和=A类元素个数+B类元素个数—既是A类又是B类的元素个数。即$$$$如果被计数的事物有A、B、C三类,那么,A类和B类和C类元素个数总和= A类元素个数+ B类元素个数+C类元素个数—既是A类又是B类的元素个数—既是A类又是C类的元素个数—既是B类又是C类的元素个数+既是A类又是B类而且是C类的元素个数。​ 即∣A∪B∪C∣∣A∣∣B∣∣C∣−∣A∩B∣−∣A∩C∣−∣。

2024-04-28 19:05:40 657

原创 数组模拟链表,链式前向星及其应用

define N100010//根据上图可以更好理解//head表示头节点的下标 e[i]表示节点i的值是多少 ne[i]表示节点下一个节点的下标//idx表示当前可以用的点的下标#define N100010邻接表有n个链表(n为图的节点数量)。其余初始化与链表的初始化类似。h[]存储每个顶点链表的头部索引。e[]存储边的目标顶点。ne[]存储同一链表中下一个元素的索引。idx是当前可用的数组索引。

2024-04-26 22:09:36 1760 4

原创 92. 递归实现指数型枚举 - AcWing题库

从 1∼n这 n 个整数中随机选取任意多个,输出所有可能的选择方案。

2024-04-21 18:55:16 673 1

原创 二叉树的前序遍历,中序遍历,后序遍历和层序遍历

【前序遍历】如果二叉树为空,则直接返回。否则,先访问根结点,再递归前序遍历左子树,再递归前序遍历右子树。【中序遍历】如果二叉树为空,则直接返回。否则,先递归中序遍历左子树,再访问根结点,再递归中序遍历右子树。层序遍历所要解决的问题很好理解,就是按二叉树从上到下,从左到右依次打印每个节点中存储的数据。(即逐层地,从左到右访问所有节点)。给定一个二叉树的根节点。给你一棵二叉树的根节点。

2024-04-19 19:56:23 732

原创 [NOIP2008 提高组] 笨小猴

但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!是一个质数,那么笨小猴就认为这是个 Lucky Word,这样的单词很可能就是正确的答案。共两行,第一行是一个字符串,假设输入的的单词是 Lucky Word,那么输出。是单词中出现次数最少的字母的出现次数,如果。是单词中出现次数最多的字母的出现次数,次,出现次数最少的字母出现了。次,出现次数最少的字母出现了。noip2008 提高第一题。【输入输出样例 1 解释】【输入输出样例 2 解释】(本处原题面错误已经修正)

2024-04-12 13:56:30 616 1

原创 洛谷 T3 句子反转题解

要求将这些单词倒序输出。而且对于每个单词,如果是小写词,应当转为大写;如果是大写词,应当转为小写;如果是自然数,应该倒转输出。给定一行句子,每个词之间用空格隔开,要么是全小写英文单词,要么是全大写英文单词,要么是自然数。的数据,句子中包含的单词数量不超过。仅一行,表示程序对句子的处理结果。仅一行,即需要反转的句子。,每个单词长度不超过。

2024-04-08 13:02:46 514

原创 顺序表实现栈

对于顺序表,在 C语言 中表现为数组,在进行栈的定义之前,我们需要考虑以下几个点:1)栈数据的存储方式,以及栈数据的数据类型;2)栈的大小;3)栈顶指针;我们可以定义一个栈的结构体,C语言实现如下所示:int// (1)100005// (2)// (4)int top;// (5)(1) 用DataType这个宏定义来统一代表栈中数据的类型,这里将它定义为整型,根据需要可以定义成其它类型,例如浮点型、字符型、结构体 等等;(2)maxn代表我们定义的栈的最大元素个数;

2024-04-07 18:50:50 1585

原创 快速排序和堆排序

快速排序采用的是分治思想,即在一个无序的序列中选取一个任意的基准元素pivot,利用pivot将待排序的序列分成两部分,前面部分元素均小于或等于基准元素,后面部分均大于或等于基准元素,然后采用递归的方法分别对前后两部分重复上述操作,直到将无序序列排列成有序序列。

2024-04-07 18:49:56 296

原创 归并排序的实现

【代码】归并排序的实现。

2024-04-06 20:08:53 113 1

原创 堆排序的实现

调整堆(AdjustHeap)。调整堆的目的是确保以某个节点为根的子树满足堆的性质(最大堆或最小堆)。这里我们假设要实现的是最大堆。在堆(无论是最大堆还是最小堆)的数据结构中,左子节点和右子节点与它们的父节点之间存在特定的关系。这些关系确保了堆的性质得以维持。对于任何给定的父节点,其左子节点的索引通常可以通过公式计算得出,而右子节点的索引则通过公式计算得出。这里,是父节点在数组中的索引。

2024-04-06 17:09:04 362 1

原创 插入排序的实现

【代码】插入排序的实现。

2024-04-06 15:55:08 80 1

原创 选择排序的实现

【代码】选择排序的实现。

2024-04-06 15:29:04 107

原创 洛谷P1011车站问题题解

火车从始发站(称为第1站)开出,在始发站上车的人数为 a,然后到达第2站,在第2站有人上、下车,但上、下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人。从第3站起(包括第3站)上、下车的人数有一定规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第n-1站),都满足此规律。于是通过倒数第二站总人数为m列出方程:g(n-2)a+g(n-1)b-b+a=m即b=(m-g(n-2)a-a)/(g(n-1)-1) (n>=3)

2024-04-06 15:06:20 604

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除