自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 P3884 [JLOI2009] 二叉树问题

这一题考察到了dfs和bfs的使用,是一道综合性比较强的题,值得一刷。创作不易,希望大家多多支持!!!

2025-01-13 20:17:08 952 19

原创 P1827 [USACO3.4] 美国血统 American Heritage

农夫约翰非常认真地对待他的奶牛们的血统。然而他不是一个真正优秀的记帐员。他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而 不是用图形的方法。你的任务是在被给予奶牛家谱的“树中序遍历”和“树前序遍历”的符号后,创建奶牛家谱的“树的 后序遍历”的符号。每一头奶牛的姓名被译为一个唯一的字母。(你可能已经知道你可以在知道树的两 种遍历以后可以经常地重建这棵树。)显然,这里的树不会有多于 26 个的顶点。

2025-01-13 20:16:21 333 15

原创 树的模拟实现

无论是顺序表实现还是链表思想实现,他们都有优缺点。优点在于不需要频繁的进行动态空间的开辟能减少运行的时间,缺点在于需要人为的对数据量进行判断以及缺少一些灵活性。所以说,这两种方法只适合于算法竞赛中,而工程类当中是不合适的。

2025-01-11 23:56:29 433 31

原创 DFS与BFS

无论是DFS还是BFS他们的时间复杂度空间复杂度都是O(n),对于这两种方法,我们都是在遍历树的基础上实现的。DFS运用的递归原型也可以理解为树型遍历,BFS使用队列的方式实现效率更高且更直观。

2025-01-11 23:55:48 893 23

原创 操作符应用

我们常常能听见2进制,8进制,16进制这些讲法。他们都是数值的不同表达形式。根据不同的进制大小有着不同的权重比例。我们生活中常用的是10进制数,也就是逢10进1,由此推理至其他进制。例如2进制就是逢2进1。

2024-12-31 11:31:01 877 40

原创 cin/cout性能问题讨论和优化⽅法

在上面的两个案例中,我们发现虽然代码的逻辑是相同的,唯一的不同点在于scanf和cout的使用区别,一份超时一份ac,这是为什么呢?是否有可行的优化方法呢?

2024-12-27 13:56:27 828 17

原创 P8763 [蓝桥杯 2021 国 ABC] 异或变换

小蓝有一个 01 串 s=s1​s2​s3​⋯sn​。以后每个时刻, 小蓝要对这个 01 串进行一次变换。每次变换的规则相同。对于 01 串 s=s1​s2​s3​⋯sn​, 变换后的 01 串 s′=s1′​s2′​s3′​⋯sn′​ 为:​s1′​=s1​其中 a⊕b 表示两个二进制的异或, 当 a 和 b 相同时结果为 0 , 当 a 和 b 不同时结果为 1。请问, 经过 t 次变换后的 01 串是什么?

2024-12-24 14:30:00 352 10

原创 P10425 [蓝桥杯 2024 省 B] R 格式

小蓝最近在研究一种浮点数的表示方法:R 格式。对于一个大于 00 的浮点数 d,可以用 R 格式的整数来表示。

2024-12-21 21:55:53 566 4

原创 P9422 [蓝桥杯 2023 国 B] 合并数列

小明发现有很多方案可以把一个很大的正整数拆成若干正整数的和。他采取了其中两种方案,分别将他们列为两个数组 {�1,�2,⋯��}{a1​,a2​,⋯an​} 和 {�1,�2,⋯��}{b1​,b2​,⋯bm​}。两个数组的和相同。定义一次合并操作可以将某数组内相邻的两个数合并为一个新数,新数的值是原来两个数的和。小明想通过若干次合并操作将两个数组变成一模一样,即 �=�n=m 且对于任意下标 �i 满足 ��=��ai​=bi​。请计算至少需要多少次合并操作可以完成小明的目标。

2024-12-21 21:41:45 403 3

原创 P1002 [NOIP2002 普及组] 过河卒

棋盘上 A 点有一个过河卒,需要走到目标 B 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。棋盘用坐标表示,A 点 (0,0)、B 点 (n,m),同样马的位置坐标是需要给出的。现在要求你计算出卒从 A 点能够到达 B 点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。

2024-12-19 22:05:36 404 2

原创 P8795 [蓝桥杯 2022 国 A] 选素数

小蓝有一个数 x,每次操作小蓝会选择一个小于 x 的素数 p,然后在 x 成为 p 的倍数前不断将 x 加 1,(如果 x 一开始就是 p 的倍数则 x 不变)。小乔看到了小蓝进行了 2 次上述操作后得到的结果 n,他想知道 x 在一开始是多少。如果有多种可能,他想知道 x 一开始最小可以是多少,而如果不存在任何解,说明小乔看错了,此时请输出 −1。

2024-12-18 19:26:46 1453 11

原创 P8723 [蓝桥杯 2020 省 AB3] 乘法表

九九乘法表是学习乘法时必须要掌握的。在不同进制数下,需要不同的乘法表。请注意,乘法表中两个数相乘的顺序必须为样例中所示的顺序,不能随意交换两个乘数。给定 P,请输出 P 进制下的乘法表。

2024-12-17 16:09:36 791 1

原创 P8772 [蓝桥杯 2022 省 A] 求和

首先这题我们可以直接用两个for循环嵌套来控制两个变量来求值,但是这样做时间复杂度高。这里我们用到了一个前缀和差的方法。通过for循环变量第一个变量,用和差的方法的到第二个量,这样就只用了一次循环,大大减少了时间复杂度。需要注意的是,这题有时间限制开辟大数组时需要开在全局中(程序留给全局的空间大,而留给main函数内的空间少)。

2024-12-16 14:51:12 485

原创 P8716 [蓝桥杯 2020 省 AB2] 回文日期

2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按yyyymmdd的格式写成一个 88 位数是20200202,恰好是一个回文数。我们称这样的日期是回文日期。有人表示20200202是“千年一遇” 的特殊日子。20211202即 2021 年 12 月 2 日。也有人表示20200202并不仅仅是一个回文日期,还是一个ABABBABA型的回文日期。对此小明也不认同,因为大约 100100 年后就能遇到下一个ABABBABA21211212。

2024-12-16 14:39:05 499

原创 leetcode.最长回文子串

给你一个字符串s,找到s中最长的 回文子串。"bab""aba" 同样是符合题意的答案。

2024-12-12 18:33:07 354 1

原创 string类

因为我们使用了一个get函数,若频繁的调用函数会导致函数调用开销增大,主要体现在几个方面,一是程序执行流程的跳转,处理器需要将当前执行指令序列跳转到get函数所在的内存地址开始执行,这涉及到指令流水线的刷新和填充,会产生一定的时间延迟。size的大小为字符串中字符的个数(包含空格位),capacity的大小是最大能包含的字符个数,当size的个数大于capacity时,capacity会自动以1.5倍进行扩容。在底层上,会创建一个buff数组,若其大小小于buff的范围,则会储存在自己本身的上。

2024-12-12 15:32:09 980 1

原创 leetcode.三步问题

三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。:n = 3:4: 有四种走法:n = 5:13。

2024-12-12 15:24:21 424

原创 new与delete操作内置类型

new与malloc类似,用于开辟空间。delete与free类似,用于释放空间。但new与delete的区别在于对于自定义类型他们使用时会调用构造和析构函数。new调用时()内是要初始化的值,【】内是要初始化的个数。当同时需要多个初始化时,则用{}包含各个初始化的值。在delete时开辟多个值的需要使用delete【】来调用析构函数。

2024-11-25 21:04:58 353 2

原创 类和对象plus版

图中class为关键字,Stack为类的名字,用{}框住类的主体,类定义完后;不能省略。为了区分成员变量,一般习惯在成员变量前面或后面加一个特殊标识,_或者m_

2024-11-25 19:37:16 641 3

原创 3步实现贪吃蛇

这是一个宏,用于检测按键状态,若按键被按下则首位为1,否则则为0。

2024-11-17 23:12:07 2741 8

原创 排序问题分析

根据方法类型的不同分为插入排序,选择排序,交换排序,归并排序。在此底层逻辑上又有直接插入排序,希尔排序,直接选择排序,堆排序,冒泡排序,堆排序,快速排序,归并排序。

2024-11-14 16:08:42 954 2

原创 链式结构二叉树

二叉树查找值为x的结点。

2024-11-11 23:02:54 264

原创 二叉树的实现

树是一种非线性数据结构,由有限个结点组成的具有层次关系的集合。树的根部位置就叫根结点,除根结点以外,其余的树被分为各个互不相交的集合。树的根系只能向下延伸不能向左右延伸。除根结点以外每个结点有且仅有一个父结点。一棵n个结点的树有n-1条边。

2024-11-10 20:38:02 412

原创 C++入门

定义命名空间,需要namespace关键字,在关键字后面加{},括号里面定义变量函数类型等。namespace本质是定义出一个域,这个域与全局域各自独立,不同的域可以定义同名变量。c++中有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找一个变量函数类型的出处逻辑,局部域和全局域会影响变量的生命周期,命名空间域和类域不影响变量生命周期。namespace只能定义在全局,且可以嵌套定义,若文件中有多文件定义的同名namespace会认为是一个namespace,不会冲突。

2024-11-10 19:55:37 264

原创 队列

只允许在一端进行插入数据操作,另一端进行删除删除数据的操作的线性表,队列具有先进先出。入队列:进行插入操作的一端称为队尾出队列:进行删除操作的称为队头运用链表实现队列效率更高。

2024-11-02 17:13:01 335 2

原创 栈的实现

栈,是一种特殊的线性表,只允许在固定的一端进行插入删除元素的操作,进行数据插入删除操作的一端称为栈顶,另一端称为栈底。栈中的数据遵循后进先出的原则。如图一个杯子一样遵循严格的顺序。

2024-11-02 16:24:01 309

原创 双向链表的实现

双向链表区别于单链表不同的地方在于,双链表多出于一个指针能指向前面结点,使得整个链表得以首位相连。带头链表里的头结点称为哨兵位,哨兵位结点不储存任何有效元素,只是放哨功能。

2024-11-02 15:50:58 465

原创 链表的实现

链表是一种物理储存结构上非连续,非顺序的储存结构,数据元素的逻辑顺序是通过链表中指针链接次序实现的。通俗讲链表的地址是非连续的,但是每个地址中都存储着另一个地址,这使得这两个元素通过地址相互链接了,所以有着逻辑顺序的,但是不存在物理顺序。通常我们将这个储存地址的东东叫做结点。

2024-10-20 20:43:09 361

原创 顺序表的实现

顺序表是一段物理地址连续的储存单元依次存储数据元素的线性结构,一般情况下采用数组储存。那有人可能会问,顺序表和数组又有啥区别呢?举个例子,这就相当于苍蝇馆子菜名是炒西蓝花,而到了米其林餐厅就变成了绿野仙踪。顺序表的底层结构还是数组,但是在数组的基础上进行封装,实现常用的增删改查等功能。

2024-10-20 20:01:42 558

原创 算法复杂度

算法编写成可执行程序后,需要耗费时间空间资源,衡量一个算法的好坏是从时间和空间两个维度衡量。时间复杂度衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。

2024-10-13 19:59:51 369

原创 编译和链接

翻译环境是由编译和链接组成的,而编译又可以分解成:预处理,编译,汇编三个过程。一个C语言中可能有很多个.c文件,通过编译器预处理生成对应文件,然后通过链接器整合处理生成最终的可执行程序。展开编译器。

2024-10-01 13:48:12 140

原创 文件操作

如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数的,如果要将数据进⾏持久化的保存,我们可以使⽤⽂件。流是抽象出的概念,我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输入输出操作各不相同,为了方便程序员对各种设备进行方便操作而产生的概念。数据在内存中以二进制的形式存储,如果不加转换的输出到外存的文件中,就是二进制文件。根据文件指针的位置和偏移量来定位文件指针(文件内容的光标)。

2024-09-30 14:13:44 414

原创 动态内存管理

空间开辟的大小是固定的,数组在申明时必须指定数组的长度,数组空间一旦确定大小不能调整。但是我们对于空间的需求不仅仅是上面这种情况,有时我们需要的空间大小在程序运行时才能知道,那数组的编译时开辟空间的方式就不能满足了。情况2:原有空间没有足够多的空间时,会在堆空间上找另外一个合适大小的连续空间。这样函数返回的是一个新的地址。ptr是要调整的内存地址,size是调整之后的大小,返回值为调整之后的内存起始位置。情况1:当是情况1时,要扩展的内存直接在原有内存之后追加空间,原有空间的数据不变化。

2024-09-30 10:52:27 400

原创 自定义类型:联合和枚举

和结构体一样,联合体也是由一个或者多个成员构成,这些成员可以是不同类型。但是编译器只为最大的成员结构分配足够的内存空间,联合体的特点是所有成员共用一块内存空间。所以联合体也叫:共用体。给联合体其中一个成员赋值,其他成员也会跟着变化。输出结果为4,这是什么原因呢?

2024-09-30 09:59:31 186

原创 自定义类型:结构体

结构体是一些值的集合,这些值称为成员变量。结构体的每个成员可以是不同的类型的变量。

2024-09-29 14:21:14 293

原创 C语言内存函数

输出格式函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置,当遇到\0时不会停止,source和destination有任何重叠,复制的结果都是未定义的。memcpy的模拟实现。

2024-09-29 10:08:11 472

原创 字符函数和字符串函数

C语言提供2个字符转换函数tolower toupper 他可以转换大小写。

2024-09-28 14:13:35 1154

原创 qsort函数

当你把函数的指针作为参数传递给另一个函数,当这个指针被调用其所指向的函数时,背调的函数就是回调函数。qsort(数组名,数组大小,数组类型,回调函数)使用qsort函数排列整型数据。2.qsort使用举例。

2024-09-28 12:28:05 118

原创 详解指针3

sizeof计算变量所占内存空间的大小,单位是字节,sizeof只关注内存空间大小不在乎数据。strlen是C语言中的库函数,计算到\0之前的字符串个数。1.sizeof和strlen的对比。

2024-09-28 12:27:51 231

原创 详解指针2

通过上面代码我们发现数组名和数组首元素地址打印出的结果一模一样,我们发现,数组名就是数组是数组首元素的地址。如果是这样那么可能会有人疑惑那这串代码的输出值应当是4才对啊,为什么是40呢?其实数组名是数组首元素地址是对的,但是有两个例外sizeof单独放数组名,这里的数组表示整个数组,计算的是整个数组的大小,单位是字节。&数组名,这里的数组名表示整个数组,取出的是整个数组的地址。除此之外任何地方的数组名都表示首元素地址。观察下面这段代码,我们发现&arr+1,跨过了整个数组长度;

2024-09-16 20:22:07 183

空空如也

空空如也

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

TA关注的人

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