- 博客(62)
- 收藏
- 关注
原创 【蓝桥杯】雪地工程核弹引爆控制器最小数量计算
邻接表:存储图结构,每个节点维护相邻节点列表。树构建:通过BFS确定父子关系,明确树形结构。后序遍历:自底向上标记子树状态,确保父节点能继承子节点的核弹信息。控制器计算:每个中转站需要覆盖的子节点数决定控制器数量。
2025-03-15 13:49:30
788
原创 【蓝桥杯】第15届c++B组--R格式
小蓝最近在研究一种浮点数的表示方法:RR 格式。对于一个大于 0 的浮点数 dd,可以用 RR 格式的整数来表示。对于 100%100% 的评测用例:1≤n≤1000,1≤1≤n≤1000,1≤ 将 dd 视为字符串时的长度 ≤1024≤1024;对于 50%50% 的评测用例:1≤n≤10,1≤1≤n≤10,1≤ 将 dd 视为字符串时的长度 ≤15≤15。一行输入一个整数 nn 和一个浮点数 dd,分别表示转换参数,和待转换的浮点数。输出一行表示答案:dd 用 RR 格式表示出来的值。
2025-03-12 13:09:46
1026
原创 第15届蓝桥杯题目解析----好数
一个整数如果按从低位到高位的顺序,奇数位 (个位、百位、万位 ⋯⋯ ) 上的数字是奇数,偶数位 (十位、千位、十万位 ⋯⋯ ) 上的数字是偶数,我们就称之为 “好数”。具体来说,这些数字的奇数位上的数字必须是奇数,偶数位上的数字必须是偶数。对于第一个样例,2424 以内的好数有 11、33、55、77、99、2121、2323,一共 77 个。对于 100%100% 的评测用例,1≤N≤1071≤N≤107。对于 10%10% 的评测用例,1≤N≤1001≤N≤100。
2025-03-09 16:45:38
362
原创 高效判断2的幂次
打花结的形状多样,有圆形、方形、菱形等,每种形状都有其独特的寓意和象征意义。小蓝想要从中选取一些花纸来制作打花结,但只有经过若干次折叠操作后使花纸的面积变为 XX 的花纸才能用于打花结。接下来 NN 行,每行输入两个整数 li,wi(1≤li,wi≤100)li,wi(1≤li,wi≤100) 表示花纸的长宽。第一行输入两个整数 N,X(1≤N≤103,1≤X≤104)N,X(1≤N≤103,1≤X≤104) 表示花纸数量。将纸准确对折成一半,形成一条与宽度方向平行的水平对折线,长度减半。
2025-03-01 16:21:51
758
原创 蓝桥杯入门赛【舞狮】算法赛题目
那我解决这个题目的时候,我的第一反应就是通过排序,然后查找符合要求的数组,然后记次数,但是后面经过学习,发觉这个题应该使用贪心算法再加上二分查找,可以更高效的解决这个问题,其中还用到了优先队列算法,可以说是一个复合题目难度对于我来说的确不低,其中使用的这个函数也是我不曾用过的。例如 [1,2,3,4],[2,3,5][1,2,3,4],[2,3,5] 是合法的舞狮队,[1,3,1],[2,1,3][1,3,1],[2,1,3] 则不是合法的舞狮队。否则,将当前成员放入找到的最长队列中,并更新该队列的长度。
2025-02-25 13:48:07
530
原创 二分查找算法
这是一段二分查找的模板代码,二分查找在于解决算法问题中经常用到,建议背过这个模板,但如果想要熟练的理解其中的条件还有过程,还需要练习一些题目。
2025-02-17 16:41:24
80
原创 双指针分治算法求逆序数对
将数组不断二分,分别计算左半、右半区间的逆序对数量,再统计跨区间的逆序对。:在归并排序的合并过程中统计逆序对数量,利用分治法高效计算。(区间长度为 0 或 1),无逆序对,直接返回 0。:计算数组中所有逆序对的数量(逆序对定义为满足。:将左半或右半区间剩余元素依次放入备份数组。:合并后的有序数据写回原数组,减少内存占用。:如计算排列的逆序数、评估数据的有序性。)均构成逆序对,逆序对数量为。开始递归计算逆序对数量。:当前区间的逆序对总数。,统计逆序对数量为 1。,统计逆序对数量为 1。
2025-02-16 20:56:00
368
原创 力扣题目解析--两数相除
7/-3 = -2.33333.. ,向零截断后得到 -2。10/3 = 3.33333.. ,向零截断后得到 3。整数除法应该向零截断,也就是截去(有符号整数,其数值范围是。乘法、除法和取余运算。假设我们的环境只能存储。给你两个整数,被除数。
2024-12-24 21:52:28
330
原创 力扣题目解析--删除有序数组中的重复项
这个题目并不难,而且实训的代码也很简单,逻辑上来讲是这样子的,但是对于代码的基础性知识的考察还是有的,他返回的东西其实很奇怪,简单来讲就是里边有一个内置函数,所以我的返回值是一个整形,但是他会自己给你把那个数组补上。// 长度正确的期望答案。不需要考虑数组中超出新长度后面的元素。不需要考虑数组中超出新长度后面的元素。,返回删除后数组的新长度。删除重复出现的元素,使每个元素。函数应该返回新的长度。
2024-12-20 20:24:41
874
原创 力扣题目解析--K个一组翻转链表
是一个正整数,它的值小于或等于链表的长度。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。的整数倍,那么请将最后剩余的节点保持原有顺序。个节点一组进行翻转,请你返回修改后的链表。
2024-12-19 14:11:54
887
原创 力扣题目解析--两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
2024-12-17 20:55:38
366
原创 List容器
1.List容器的优点:可以对任意位置进行快速插入或者删除元素List容器的缺点:容器遍历速度没有数组快,占用的空间比数组大但是这些优点和缺点同时又是数组的缺点和优点,因此我们说链表和数组在性质上是互补的2.STL中的链表是双向循环链表List链表迭代器只支持前移和后移List链表的优点是采用动态存储分配,不会造成内存浪费和溢出,并且执行插入和删除操作十分方便,修改指针即可,不用移动大量元素。但同时list链表的缺点就是时间和空间耗费大3.L1[0]不可以用[]的方式访问list中的元素。
2024-12-01 21:07:16
971
原创 queue容器
通过理解其工作原理及如何正确地使用它所提供的成员函数,我们可以更好地利用这一强大的工具来简化编程任务。支持快速的头尾操作,非常适合实现队列这种先进先出(FIFO, First In First Out)的数据结构。是一种线性数据结构,它遵循FIFO原则,即最早插入的元素最先被移除。中,只能在一端(队尾)添加新元素,在另一端(队首)移除元素。是我们自定义的一个类,用于存储人的姓名和年龄信息。),也有助于优化程序性能,尤其是在处理大量数据的情况下。是模板类,因此可以用来存储任意类型的数据。
2024-11-30 16:27:15
378
原创 vector容器
是C++标准库中的一个动态数组容器,它支持动态调整大小,可以高效地在尾部插入和删除元素。中的元素在内存中是连续存储的,这使得随机访问元素非常高效,时间复杂度为O(1)。但是,由于内存的连续性,非尾部的插入和删除操作会导致大量数据移动,时间复杂度为O(n)。
2024-11-29 14:43:12
1202
原创 deque容器
std::deque(双端队列)是C++标准库中的一个容器,类似于,但它提供了在头部和尾部高效插入和删除元素的能力,时间复杂度为O(1)。与不同,std::deque不保证所有元素都存储在连续的内存空间中,而是通过一系列分段的连续内存块来存储元素,这些内存块通过一个中控器(map)连接起来,中控器维护每个内存块的地址,从而实现逻辑上的连续性。
2024-11-29 14:26:35
821
原创 力扣题目解析--合并k个升序链表
比较器是一个函数对象,用于定义两个对象之间的比较规则。在 C++ 标准库中,许多容器(如std::sort)都允许用户自定义比较器。// 最小堆:定义一个结构体Compare,用于存储比较逻辑。:重载()操作符,使其像一个函数一样调用。参数a和b是两个ListNode*类型的指针。返回值bool表示a是否大于b。:如果a的值大于b的值,返回true,否则返回false。这使得优先队列成为一个最小堆。优先队列是一种特殊的队列,取出元素的顺序并不是按照进入的顺序,而是根据元素的优先级。
2024-11-18 22:11:19
1038
原创 力扣题目解析--括号生成
这段代码使用的是回溯的思想,代码是通过学习力扣题解里边儿的思想在改进过来的,这种思想其实和双指针是一脉相承的。代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且。这行指定了接下来定义的成员函数或变量是私有的(),意味着它们只能在类的内部被访问。n=1: 排列组合。n=2: 排列组合。
2024-11-17 22:28:28
924
原创 力扣题目解析--合并两个链表
虚拟头节点dummy用于简化边界条件的处理。while循环用于不断选择两个链表中较小的节点,并将其连接到结果链表中。if语句用于比较两个节点的值,并选择较小的一个。current指针始终指向结果链表的最后一个节点,确保下一次循环中可以继续添加新的节点。最后处理剩余节点,确保所有节点都被正确连接到结果链表中。
2024-11-15 13:40:09
1100
原创 力扣题目解析--有效的括号
学者在最初接触的这道题的时候,刚开始的想法就是利用地图查找法来进行匹配,但是那样写的代码太过于臃肿,而且出了问题。然后经过学习,认为地图查找法可以使用,但是需要辅助。于是利用栈来辅助判断括号。1.栈(下面来详细介绍一下占数组之间有何特点和优点,这样可以帮助我们更加正确的认识这样的使用,在以后解决问题的过程中,我们可以正确的使用栈的特点和优点。如果是左括号,它会在。提供的一个成员函数,用于检查键。,判断字符串是否有效。中找到对应的右括号。
2024-11-13 13:56:35
1107
原创 力扣题目解析--删除链表的倒数第n个节点
通过使用虚拟头节点和双指针法,我们可以有效地删除链表中的倒数第 nn 个节点。虚拟头节点简化了边界条件的处理,双指针法确保了我们能够准确地找到要删除的节点的位置。
2024-11-10 14:08:00
643
原创 力扣题目解析--四数之和
四数之和的代码和三数之和基本上就是照猫画虎,不知道的或者感兴趣的可以去看三数之和,里面详细介绍了这个双指针循环所注意用的点和它每一个步骤的作用。所以就把多出来的这个数放在了left之前,那就完美的解决了问题。接下来再遇到什么五数之和,六数之和的时候,我想所有问题就可以迎刃而解,保证双指针循环不动,在left前方加多出来的数就可以了,当然那个所加的数必须得是循环,而不能够是单独的,也就是循环的嵌套,意思是你得加一个For循环,这个多加的for循环得注意,就是你得时刻谨记你要去过滤掉那些重复的数。
2024-11-09 15:45:26
1128
原创 力扣题目解析--电话号码的字母组成
初始化变量:定义了用于存储当前的字母组合,result用于存储所有可能的字母组合。检查输入:如果输入字符串为空,直接返回空的vector。定义映射表:使用将每个数字字符映射到其对应的字母字符串。调用辅助函数:递归地生成所有可能的字母组合。递归条件:当当前索引index达到输入字符串的长度时,将当前组合添加到结果中并结束当前递归分支。回溯:在每次递归调用后,移除最后一个字母,继续尝试其他字母。
2024-11-08 13:20:51
1127
原创 力扣题目解析--最接近的三数之和
题目类似于昨天的三数之和,写者在认真总结和反思了昨天所学的三数之和后,当看到今天的题目认为应该采取同样的双指针循环来寻找最接近的三数之和。今天的思路整体完全没有任何问题,唯独有一点,在我考虑的应该通过绝对值。来判断是否接近的时候,我并不会使用绝对值的函数abs。产生了一定的混乱,不过没关系,对于这道题目的整个思路,整个逻辑没有任何影响,只是因为学习上的不足。与 target 最接近的和是 2 (-1 + 2 + 1 = 2)。与 target 最接近的和是 0(0 + 0 + 0 = 0)。
2024-11-06 15:19:13
1299
原创 力扣题目解析--最长公共前缀
看到这个题目,我的第一反应就是通过双循环暴力破解。我的最初想法是通过三个循环将每一个字符串中的每一个字符进行对比.但是,我忽略了一个问题。我这样做会产生一个错误就是把他们所有相同的字符全部都集合到一起。而且我在这么做的时候还遇到另外一个问题就是我的结果他会把重复的字符都加进来。不过我去将这个问题问的AI,我觉得他的解决办法非常值得我思考。当我使用了类去解决这个问题的时候,不单单是循环的数量减少了,而且我也免除了结果重复字符这个问题。因为我的类每一次都会被调用,所以不存在我的结果会不断的积累。
2024-11-04 18:19:32
949
原创 力扣题目解析--罗马数字转整型
其实罗马数字转换为整型这个问题并没有这样复杂,只是我在做题目的过程中想要利用一下函数和使用一下自定义的函数,才会显得这个代码有些臃肿和复杂。我最初的想法就是通过映射表来处理罗马数字和整数之间的关系,只是在推进的过程之中。我发现要解决这个问题就需要自定义一个函数去专门的在映射表之中寻找罗马数字和整型数字,因此就定义了一个这样的函数去通过罗马数字寻找整数,而在我已经完成这个函数,并且。得到结果的时候我发现罗马数字有一个很关键的问题就是。
2024-11-03 16:59:57
1140
原创 力扣题目解析--整数转罗马数
七个不同的符号代表罗马数字,其值如下:罗马数字是通过添加从最高到最低的小数位值的转换而形成的。将小数位值转换为罗马数字有以下规则:给定一个整数,将其转换为罗马数字。示例 1:输入:num = 3749输出: "MMMDCCXLIX"解释:3000 = MMM 由于 1000 (M) + 1000 (M) + 1000 (M) 700 = DCC 由于 500 (D) + 100 (C) + 100 (C) 40 = XL 由于 50 (L) 减 10 (X) 9 = IX 由于 10 (X)
2024-11-02 22:09:00
1696
原创 力扣题目解析--盛最多水的容器
键盘的一个地方在于,没办法控制它的宽度,如果通过双循环暴力破解的话,实际上宽度的定义是错误的,所以计算出来的结果一定是错的。反倒是这种双指针while循环得出来的结果。应该会是正确的,而且更加准确。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。轴共同构成的容器可以容纳最多的水。找出其中的两条线,使得它们与。返回容器可以储存的最大水量。
2024-11-01 15:18:22
257
原创 力扣题目解析--正则表达式匹配
动态规划:使用动态规划方法来处理正则表达式的匹配问题,确保每个字符和模式的组合都被正确处理。索引检查:确保在访问字符串索引时,索引在有效范围内,避免越界错误。特殊情况处理:特别处理和的匹配规则,确保可以匹配零个或多个前面的字符,可以匹配任意字符。
2024-11-01 14:57:44
914
原创 力扣题目解析--字符串转换整数
字符串转换:使用std::stoll将字符串转换为long long类型,以确保不会发生溢出。处理溢出:在捕获异常时,根据字符串的第一个字符返回INT_MAX或INT_MIN。处理无效字符和空字符串:在捕获异常时,返回0。
2024-10-31 22:00:01
505
原创 力扣题目解析--字符串转换整数
字符串转换:使用std::stoll将字符串转换为long long类型,以确保不会发生溢出。处理溢出:在捕获异常时,根据字符串的第一个字符返回INT_MAX或INT_MIN。处理无效字符和空字符串:在捕获异常时,返回0。
2024-10-31 21:56:15
535
原创 力扣题目解析--整数反转
字符串转换:使用to_string将整数转换为字符串。处理负号:在遍历字符串时,先处理负号,确保负号被正确添加到结果字符串中。字符串反转:从后向前遍历字符串,将字符添加到结果字符串中。整数转换:使用std::stoi将结果字符串转换为整数,并捕获可能的异常。这个题相比于回文数。最困难的一点其实在于溢出这个异常处理。
2024-10-31 21:41:32
662
原创 力扣题目解析--Z字形变换
循环(range-based for loop),它是C++11引入的一种更加简洁和易读的方式来遍历容器中的元素。确定了字符在Z字形排列中的周期性规律,使得我们可以简单地通过模运算和除法来确定每个字符应该放置的位置。这段代码的目的是将之前按照Z字形排列分配到各个行的字符重新组合成一个新的字符串。在Z字形排列中,当字符串按Z字形排列时,每个字符都会遵循一定的规律。中存储了每一行的字符,将这些字符拼接起来就得到了Z字形排列后的字符串。例如,在一个周期长度为。对于第一行和最后一行,它们的周期是一样的,即每隔。
2024-10-31 21:14:17
1641
原创 vector迭代器和标准库的使用
迭代器:在C++中,迭代器提供了一种方法来访问容器中元素,而不暴露容器底层实现的细节。begin()返回指向容器第一个元素的迭代器,end()返回指向容器最后一个元素之后的迭代器。 push_back():用于在vector的末尾添加新的元素。vector会自动调整大小以容纳新加入的元素。 for_each():是algorithm库提供的一个函数模板,可以用来对容器中的每一个元素执行指定的操作。这里传入了Print函数作为第三个参数,for_each会对容器v中的每一个元素调用一次Print函数。
2024-10-28 22:22:39
409
原创 源路由攻击及网络安全威胁总结
源路由机制过程描述冒充信任IP地址实例实例结合嗅探与欺骗技术序列号机制寻找合适的攻击目标实例防范源路由欺骗防范信任关系欺骗防范会话劫持攻击实例ARP数据包ARP欺骗原理防范ARP欺骗实例实例防范实例工作原理欺骗过程实例过程实例源路由攻击与TCP会话劫持的关系ARP攻击与TCP会话劫持的关系电子邮件欺骗、DNS欺骗与Web欺骗的关系虽然上述攻击各有特点,但综合防范措施可以有效减少被攻击的风险:
2024-10-06 15:44:53
1231
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人