- 博客(37)
- 收藏
- 关注
原创 CF786B Legacy
该代码实现了一个高效处理区间连边的最短路算法。它使用线段树结构优化点与区间之间的连边操作:构建出树和入树两棵线段树,分别处理从点到区间和区间到点的连边。通过Dijkstra算法计算从起点到各点的最短路径,其中线段树节点间的边权为0,有效减少了边数。最终输出每个原始节点到起点的最短距离,若不可达则输出-1。该算法适用于大规模图的区间连边问题,显著降低了时间复杂度。
2025-10-19 22:19:53
368
原创 CF547D Mike and Fish
这篇文章介绍了一个二分图边着色算法。该算法通过构建二分图(行节点x和列节点y+DELTA),使用链式前向星存储图结构,并处理奇度数节点以确保欧拉回路存在。然后通过DFS遍历进行边定向,将行到列的边染成红色,列到行的边染成蓝色。最终输出每条边的颜色标记。该算法适用于坐标最大为200000的情况,使用DELTA=200000+2作为偏移量来区分行、列节点。
2025-10-19 20:59:55
287
原创 CF1361C
这篇代码解决了一个关于珍珠配件的欧拉回路问题。它从高到低枚举可能的美丽值k,检查是否存在欧拉回路。对于每个k,首先验证颜色节点的度数是否全为偶数(欧拉回路必要条件),然后构建配件与颜色节点之间的二分图。使用Hierholzer算法寻找欧拉回路,并验证是否访问了所有配件节点(连通性检查)。找到可行解后,根据颜色匹配确定珍珠输出顺序。如果没有找到k≥1的解,则输出k=0的平凡解。算法通过位运算和链式前向星优化图处理,时间复杂度与n和k的二进制位数相关。
2025-10-19 20:24:46
103
原创 AT_arc084_b [ABC077D] Small Multiple
该程序使用01BFS算法寻找K的最小倍数,使其数字和最小。从余数1开始,通过两种操作扩展状态:在末尾加0(数位和不变)或加1(数位和+1)。采用双端队列优先处理数位和更小的状态,并用标记数组避免重复计算。当找到余数为0时输出当前数位和即为答案。算法时间复杂度为O(K),空间复杂度为O(K)。
2025-10-17 22:33:52
72
原创 CF1163F Indecisive Taxi Fee
这篇文章介绍了一个解决图中边权修改后最短路径查询问题的算法。算法核心是通过预处理构建主最短路径和备选路径系统,主要包括以下步骤:1)使用Dijkstra算法计算从起点和终点的最短路径;2)标记主路径上的边并确定每个节点在主路径上的覆盖区间;3)扫描非主路径边计算作为替代路径时的最小长度;4)对查询进行高效处理,根据修改边是否在主路径上分别计算。该算法通过预处理和扫描线技术实现了高效的在线查询,能够快速给出边权修改后的最短路径长度。
2025-10-17 19:07:51
108
原创 AT_abc164_e [ABC164E] Two Currencies
该程序使用Dijkstra算法求解带银币约束的最短路径问题。通过建立状态图(城市+银币数量)作为节点,将道路和货币兑换操作转化为边,利用优先队列实现最短时间搜索。程序首先初始化邻接表,处理双向道路和兑换操作,然后从起点(城市1,初始银币s)出发,不断扩展最小时间状态。最终输出起点到其他城市在所有可能银币状态下的最短到达时间。算法通过状态扩展有效处理了银币数量的动态变化,确保找到全局最优解。
2025-10-16 20:06:49
95
原创 CF1628E Groceries in Meteor Town
本文提出了一种基于Kruskal重构树和线段树的数据结构,用于高效处理动态连通性问题。通过Kruskal重构树构建具有最大边权信息的树形结构,并结合线段树维护动态开启/关闭的节点状态。算法支持两种操作:批量开启/关闭节点区间,以及查询指定点到任意开启节点的路径最大危险等级(即重构树LCA节点的权值)。预处理时间复杂度为O(nlogn),每个查询操作时间复杂度为O(logn),实现了对动态连通性问题的快速响应。该方法充分利用了Kruskal重构树的性质和线段树的高效区间操作特性。
2025-10-15 22:39:32
89
原创 CF1550F Jumping Around
本文实现了一个基于Boruvka算法的最小生成树解决方案,用于处理石头跳跃问题。给定n个点及其坐标,程序通过多次迭代查找和合并连通块,构建最小生成树。每次迭代中,算法为每个连通块寻找最近的相邻连通块,合并它们并记录边权。最终通过DFS计算从起点到各点的路径最大边权,回答查询时判断该边权是否不超过给定值k。算法高效处理了连通块合并和路径查询,时间复杂度为O(n log n)。
2025-10-15 22:23:04
79
原创 洛谷//P1546-Prim
本文展示了使用Prim算法求解最小生成树的C++实现代码。代码定义了一个邻接表存储图结构,通过初始化距离数组、标记访问节点,并在循环中不断选择当前最小边来构建生成树。核心函数prim()实现了标准Prim算法流程:1)初始化距离数组为无穷大;2)每次选择未访问的最小距离节点;3)更新相邻节点距离;4)累计总权重。主函数读取邻接矩阵输入并调用prim()输出结果。代码包含详细注释,适合作为Prim算法的学习参考。
2025-10-12 20:26:43
263
原创 CF1142B,代码:
这篇代码解决了一个关于循环排列匹配的问题。给定排列p和数组a,需要判断a的子数组中是否存在p的循环移位。主要采用倍增和ST表技术:1)预处理每个位置在a中匹配下一个数字的位置;2)使用倍增计算每个位置匹配完整循环后的终点;3)构建ST表快速查询区间最小值。对每个查询,若区间内存在某个位置能完整匹配且终点也在区间内,则输出1,否则0。算法复杂度为O(n log n),适用于大规模数据。
2025-10-12 20:25:35
200
原创 CF1182B代码+注释
本文展示了一个解决树形动态规划问题的代码实现。该代码使用两次DFS遍历:第一次DFS计算以根节点1为基准的各子树代价;第二次DFS进行换根操作,计算每个节点作为根时的最小统一代价。核心算法通过维护子树大小和代价数组,在O(n)时间内完成所有节点的计算。代码包含详细注释,解释了状态转移方程和换根公式的推导过程。适用于处理树结构中需要统一节点值的优化问题。
2025-10-12 20:24:48
193
原创 CF1515E Phoenix and ComputersAC代码+详细注释
这篇文章介绍了一个动态规划算法,用于解决Phoenix and Computers问题。该算法计算将n台电脑分成连续段手动打开的方案数,模数为mod。核心是维护二维数组f[i][j],表示处理i台电脑时形成j个连续段的方案数。通过五种转移情况(单独开新段、扩展段两端、间隔扩展、连接相邻段、间隔连接)进行状态转移。最终输出f[n][1],即所有电脑处理完且只剩1个连续段的方案数。该算法时间复杂度为O(n^2),适用于n≤400的情况。
2025-10-12 20:24:06
110
原创 CF1142B AC代码+详细注释
该代码实现了一个高效查询序列中特定循环模式匹配的算法。主要步骤如下: 预处理排列p的循环后继关系,建立每个元素的前驱指针; 扫描序列a,为每个位置i建立关键数组c[i],记录其在排列p循环顺序中的下一个匹配位置; 构建树结构表示匹配关系,并进行DFS遍历计算每个位置能形成完整循环移位的最右端点r[i]; 预处理r数组,使r[i]保存从i开始向右能形成循环移位的最小右端点; 处理查询时,通过比较查询区间右端点和r[i]值来判断是否存在匹配。 该算法通过巧妙的数据结构设计,将复杂的模式匹配问题转化为高效的树遍历
2025-10-12 20:23:19
99
原创 CF1848F Vika and Wiki AC代码(详细注释)
该代码实现了一个求解最小操作次数的算法,用于将数组通过异或操作全部变为0。算法核心是:从最大步长n/2开始逐步减小,每次计算当前数组经过step次操作后的新状态,若新数组不全为0则保留该状态并累计操作次数。最终检查数组是否全为0,否则还需额外一次操作。该算法通过分步处理高效找到最小操作次数,时间复杂度为O(n log n)。输入为数组长度n和初始数组,输出将数组全变为0所需的最小操作次数。
2025-10-12 20:19:52
77
原创 2025_CSP-S_初赛解析(前十五题)
2025CSP-S初赛真题解析摘要:本文包含15道单项选择题的详细解析,涵盖算法与数据结构核心知识点。题目涉及红蓝球编码(二进制表示)、KMP算法的next数组计算、线段树查询复杂度分析、Trie树节点计数、排列组合、树形结构、背包问题、最近公共祖先、时间复杂度分析、堆排序、容斥原理应用、递归优化及贪心算法等。重点解析了模式串"abacaba"的next数组构造过程(结果为[0,0,1,0,1,2,3])、线段树区间[3,11]查询的最少访问节点数(8个)、Trie树构建后的节点总数(1
2025-09-21 15:27:52
1198
原创 2021_CSP-S_T2_廊桥分配题解
本文提出了一种优化廊桥分配问题的算法。通过维护两个优先队列(正在使用的廊桥和空闲廊桥),为每个到达航班分配编号最小的空闲廊桥。当廊桥用尽时,后续航班视为停靠远机位。算法先分别计算国内和国际航班在不同廊桥数量下的停靠数,再通过前缀和计算出最优分配方案(国内i个,国际n-i个)。时间复杂度主要取决于排序和优先队列操作,能有效处理大规模数据。该解法避免了暴力破解,通过贪心策略和优先队列优化实现了高效计算。
2025-09-21 14:19:59
197
原创 状态压缩详解
状态压缩是一种优化算法的高效技术,通过将复杂状态编码为整数或位掩码来降低复杂度。其核心是将状态分解为多个部分(如16位数拆分为高低8位),利用位运算快速处理,显著减少空间和时间需求。典型应用包括动态规划优化、集合表示和布尔状态存储。通过拆分状态、独立处理各部分并合并结果,能将O(n²)优化为O(n×2^B),尤其适合大规模状态空间问题。这种技术充分发挥位运算的高效性(仅需1时钟周期),是算法优化的重要手段。
2025-08-13 19:13:39
378
原创 lowbit函数
本文详解C++中lowbit函数的实现方法,该函数用于获取数字二进制最低位1对应的值。主要介绍了三种实现方式:1)最常用的x&-x(利用补码特性);2)x&(x^(x-1));3)x-(x&(x-1))。通过二进制示例分析每种方法的原理,并指出x&-x效率最高(仅需两次操作)。文章还说明lowbit并非C++标准函数,但常用于算法竞赛和位运算编程,建议自定义实现或使用C++20的<bit>头文件功能。最后提供了实际应用示例和推荐实践方案。
2025-08-13 18:31:02
757
原创 map简明
摘要 Map是一种高效存储键值对的数据结构,特别适合处理稀疏数据。相比数组,它能有效节省内存空间,仅存储已使用的键值。Map支持多种数据类型作为键和值,并提供自动排序功能(按键字典序)。使用map.find()可以安全查找元素,避免访问未存储的键导致错误。遍历map时可通过first/second访问键值,或使用迭代器。Map适用于学号-成绩、姓名-分数等映射关系,是处理离散键值映射的理想选择。
2025-08-11 17:56:07
265
原创 随机数简明
这段C++代码演示了如何生成指定范围内的随机数。程序首先使用srand((unsigned)time(NULL))初始化随机数种子,确保每次运行生成不同的随机数。然后通过rand()%100生成0-99范围内的随机整数,并将其存储在变量a中。最后输出这个随机数。关键点在于使用取模运算限制随机数范围,公式为[min,max] = min + rand()%(max-min+1)。
2025-08-10 13:24:39
98
原创 双端队列(deque)常用函数简明
dq.size()长度,dq.size(数字)重新定义长度。dq.at(下标)=dq[下标]返回双端队列的第几个元素。dq.push_front(元素)在队首添加元素。dq.push_back(元素)在队尾添加元素。dq.pop_front()删除队首单个元素。dq.pop_back()删除队尾单个元素。注:dq代表的是声明的双端队列名称。dq.front()返回队首元素。声明:deque<类型> 名字。dq.back()返回队尾元素。
2025-08-09 20:54:48
129
原创 Lambda函数简说(不讲类中的使用)
本文介绍了C++中的Lambda表达式(匿名函数),重点讲解了其语法结构和实际应用。Lambda表达式通过捕获列表->返回类型{函数体}的格式定义,可以按值或引用捕获外部变量。文章通过多个示例展示了Lambda的典型用法:在sort函数中使用(示例2)、按值/引用捕获的区别(示例4-6)、默认捕获方式(示例7-9)以及特殊变量捕获规则(示例10)。特别强调了捕获变量的生命周期问题(如返回持有局部变量引用的Lambda会导致悬空引用)和使用function包装器的必要性(示例5)。最后指出在C++14中
2025-08-09 20:24:57
942
原创 9种构造函数简明
本文概述了C++中的9种构造函数类型及其特点:1)默认构造函数用于无参初始化;2)参数化构造函数支持带参初始化;3)拷贝构造函数实现对象复制;4)移动构造函数(C++11)高效转移资源;5)委托构造函数实现代码复用;6)转换构造函数支持类型隐式转换;7)继承构造函数(C++11)简化派生类构造;8)constexpr构造函数支持编译期初始化;9)聚合类初始化(C++11/20)提供类似C的结构体初始化。文章对比了各类构造函数的参数和用途,并给出使用建议:优先使用初始化列表、慎用隐式转换、资源管理类需实现移动
2025-08-05 17:20:43
395
原创 链式前向星(Linked Forward Star)详解
使用三个数组 head[]、to[]、next[] 存储图的边,避免指针操作,提高缓存命中率。形式组织,head[u] 指向顶点 u 的第一条边,next[i] 指向下一条边。存储顶点 u 的第一条边的编号(初始为 -1,表示无出边)。链式前向星是竞赛中图的存储首选,尤其在对性能要求极高的场景!(边数远小于顶点数平方的图)的数据结构,结合了。无动态扩容开销(适合竞赛编程的极限优化)。的快速访问优势,广泛用于图论算法(如。的下一条边的编号(类似链表指针)。(可选)存储第 i 条边的权重。(如 Dinic)。
2025-08-04 12:25:35
840
原创 Dijkstra(迪杰斯特拉算法)
Dijkstra算法是一种用于带权图中计算单源最短路径的经典算法,由Edsger W. Dijkstra于1956年提出。其核心采用贪心策略,通过逐步扩展找到从起点到所有其他节点的最短路径。该算法要求边权值非负,普通实现时间复杂度为O(V²),优先队列优化后可达到O(E+VlogV)。主要步骤包括初始化距离、优先队列处理和松弛操作。典型应用包括地图导航、网络路由和交通规划等场景。算法不适用于存在负权边的情况,此时需改用Bellman-Ford等替代方案。通过优先队列优化可显著提升Dijkstra算法的执行效
2025-08-04 12:14:48
870
2
原创 2022 CSP-S 初赛解析
本文摘要: CSP-S2022初赛解析,本文包含三部分内容:1) 15道计算机基础知识单选题,涉及Linux命令、算法复杂度、数据结构等,每题附详细解析;2) 3段程序阅读分析,包含字符串匹配、基数排序和进制转换算法,考察代码理解与时间复杂度分析;3) 2道程序填空题,分别关于双序列二分查找和倒水问题的最优解算法。所有题目均提供完整代码和逐步解析,重点考察对计算机基础概念、算法设计与分析的掌握程度。通过具体实例演示了基数排序、字符串匹配、递归搜索等算法的实现与应用。
2025-08-03 15:13:23
1027
原创 二叉搜索树 (BST)
二叉搜索树(BST)是一种高效的数据结构,具有左子树值小于根节点、右子树值大于根节点的特性。本文详细介绍了BST的查找、插入、删除和遍历操作,并提供了完整的C++实现代码。查找和插入的平均时间复杂度为O(logn),最坏情况为O(n)。删除操作需处理三种情况:无子节点、单子节点和双子节点。中序遍历可得到有序序列。文章还给出了函数式实现,包含节点创建、插入、查找、删除、遍历和内存释放等功能,适用于小型项目或算法练习。
2025-08-03 13:31:10
881
原创 CSP-S 2023 第一大题题解
哦,题目说 “0,1,2,3,4 中选取 4 个数字”,组成四位数,千位非 0,所以千位有 4 种(1 - 4),百位从剩下 4 个数(含 0 )选,4 种,十位 3 种,个位 2 种,总数是 4×4×3×2=96?哦,题目是 “0,1,2,3,4 中选取 4 个数字”,组成四位数,千位不能为 0,所以:千位有 4 种选择(1 - 4),选了千位后,剩下 4 个数字(包含 0 )选 3 个排列,即。43=4×3×2=24,所以总数是 4×24=96,选 A?但之前可能分析错,再查:这种递归方式,比如。
2025-08-01 16:55:07
657
原创 新增对数详细讲解(log)
上节课我们讲了有关指数的运算法则,实际上对数的运算法则是由指数函数的运算法则推算出来的。正因数积的对数等于同一底数的各因数的和;两个正数商的对数等于同一底数的被除数的对数减去除数的对数;正数幂的对数等于幂指数乘同一底数幂的底数的对数。通过指数函数与对数函数的图像我们心中是否会产生大胆的估计:如果底数相同,指数函数与对数函数是不是关于某条直线对称?指数函数的定义域是不是就是对数函数的值域?反函数作为一种特殊的函数之间的关系,在高考题目中,也经常考察。左侧是当底数a>1的情况,右侧是当底数0<a<1的情况。
2024-07-05 13:39:13
693
原创 system函数(修改版)
原文链接:https://blog.youkuaiyun.com/hackferances/article/details/128251420。16进制个位数有:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。这里还需说一下,这里的改变颜色说的不是改变下一次输出的字体颜色,而是改变控制台。这是萌新最常用的函数了,运行后会有个暂停的效果,在制作游戏的时候也很常见。a.system("shutdown /s /t /0") 快速关机。这里的*代表的是某个程序或可以打开的文件。
2024-07-03 10:05:52
1537
1
原创 二叉树基本遍历
(4)将二叉树每个结点的左右子树交换位置。(选做)【基本要求】从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立)则输出结果为 先序:ABCDEGF 中序:CBEGDFA 后序:CGEFDBA 层序:ABCDEFG。(2)对这棵二叉树进行遍历:先序、中序、后序以及层次遍历,分别输出结点的遍历序列;【测试数据】如输入:ABC##DE#G##F###(其中#表示空格字符)(3)求二叉树的深度、结点数目、叶结点数目;(1)按先序序列构造一棵二叉链表表示的二叉树T;
2024-07-03 09:57:12
234
2024年CSP-S第一轮初赛真题
2025-08-13
2019年CSP-S第一轮初赛真题
2025-08-13
2020年CSP-S第一轮初赛真题
2025-08-13
2021年CSP-S第一轮初赛真题
2025-08-13
2022年CSP-S第一轮初赛真题
2025-08-13
2023年CSP-S第一轮初赛真题
2025-08-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅