自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

闻缺陷则喜何志丹

本人拙作《闻缺陷则喜》欢迎指教,可在CSDN下载

  • 博客(2428)
  • 资源 (86)
  • 收藏
  • 关注

原创 亲士CAD工具箱使用方法、下载地址、需求收集

摘要:亲士CAD工具箱现支持CAD2013及以上版本(不兼容2012及以下),现公开征集功能需求。开发者邀请用户通过评论提交对二维/三维功能的改进建议或新增需求,以优化工具箱功能。

2026-01-02 11:37:25 405 63

原创 计算几何汇总

这是一个关于C++算法与数据结构中计算几何主题的博客目录页面,包含了基础知识、力扣题目和洛谷题目的分类整理。主要结构1. 基础知识部分三角函数和角公式、矢量旋转线段求交点算法点到矢量投影三角形外心计算跨立实验线段间距离计算仿射变换与齐次坐标平面凸包等基础计算几何概念2. 力扣题目(LeetCode)包含8个计算几何相关的题目,每个都有相应的难度分数(如1681、1708等)3. 洛谷题目包含13个题目,覆盖从普及到普及+的不同难度等级

2025-12-30 07:00:00 457 17

原创 【堆(优先队列)】P7913 [CSP-S 2021] 廊桥分配|普及+

C++堆(优先队列)当一架飞机抵达机场时,可以停靠在航站楼旁的廊桥,也可以停靠在位于机场边缘的远机位。乘客一般更期待停靠在廊桥,因为这样省去了坐摆渡车前往航站楼的周折。然而,因为廊桥的数量有限,所以这样的愿望不总是能实现。机场分为国内区和国际区,国内航班飞机只能停靠在国内区,国际航班飞机只能停靠在国际区。一部分廊桥属于国内区,其余的廊桥属于国际区。L 市新建了一座机场,一共有 nnn 个廊桥。该机场决定,廊桥的使用遵循“先到先得”的原则,即每架飞机抵达后,如果相应的区(国内/国际)还有空闲的廊桥,就停靠在廊

2026-03-25 16:11:32 312 5

原创 【计算几何】和差化积及积化和差

本文系统整理了三角函数的和差公式与积化和差公式,包括正弦、余弦的和差公式及其证明过程,以及积化和差的四个基本公式推导。文章还提供了相关扩展阅读资源,包括算法工具、学习资料和视频课程链接,适用于C++开发环境(VS2019/2022)。作者强调专业学习的重要性,并推荐按章节系统学习算法知识。内容涵盖数学基础公式证明与工程应用指导,适合算法学习者和开发者参考。

2026-03-25 16:05:58 440 2

原创 【分治法 前缀和】P8572 [JRKSJ R6] Eltaw|普及+

摘要 本文介绍了解决区间和最大值问题的两种方法。题目给定k个长度为n的序列,要求处理q次查询,每次查询区间[l,r]的和的最大值。方法一采用前缀和预处理,每次查询时遍历k个序列计算区间和,时间复杂度O(kq)。方法二预处理所有可能的[l,r]区间结果,空间复杂度O(n²)。针对不同数据规模(n≤1000或n>1000)采用不同方法优化性能。C++实现时发现使用标准容器会超时,改用原生数组或new分配内存可提高效率。测试样例展示了3次查询的结果。数据规模达到5×10⁵,需要高效算法处理。

2026-03-24 16:45:00 701 4

原创 P8812 [蓝桥杯 2022 国 C] 打折|普及+

本文摘要: 题目描述小蓝采购n种物品,m家店铺各有不同折扣时间段。需要计算选择一天采购所有物品的最低总花费。 算法思路: 使用差分数组处理店铺的折扣时间段,记录开始和结束时间点 维护每种物品的原价和折后价,使用multiset存储各时段价格 遍历时间点,动态更新当前各物品的最低价格 在遍历过程中记录最小总花费 时间复杂度分析: 使用有序映射处理时间点,复杂度为O(mlogm) 使用multiset维护最小价格,每次更新操作复杂度为O(logn) 代码实现: 使用map记录时间点及对应店铺 使用vector和

2026-03-24 07:59:51 335

原创 【动态规划】P8591 『JROI-8』颅脑损伤 2.0|普及+

摘要 本文探讨了线段染色问题的最优解算法。给定n条线段,要求将每条线段染成红色或黑色,满足:红色线段互不相交,每条黑色线段至少与一条红色线段相交。目标是使红色线段总长度最小。通过动态规划方法,将线段按左边界排序,定义dp[i]表示第i条线段为红色时前i条线段合法的最小长度和。算法通过两层循环枚举可能的红色线段组合,利用线段相交性质优化转移过程,最终返回所有可能解中的最小值。时间复杂度为O(n²),适用于n≤3000的数据规模。

2026-03-23 17:02:45 390 4

原创 【动态规划+前缀和+化环为链】P8810 [蓝桥杯 2022 国 C] 数组个数|普及+

本文讨论了蓝桥杯2022国赛C组G题P8810的解法。题目要求计算满足条件的环形数组A的个数,使得经过相邻最大化操作后得到给定数组B。主要思路是使用动态规划结合前缀和优化,通过化环为链的方式处理环形结构。动态规划状态表示处理长度和最后两个元素值,利用前缀和将单次状态转移时间复杂度降至O(1),总复杂度为O(10000N)。代码实现了状态转移和结果计算,适用于0≤bi≤10的约束条件。

2026-03-23 17:02:01 747 2

原创 【拆位法】P6306 「Wdsr-1」小铃的书 拆位法|普及+

题目摘要:小铃有n-1本书,每类书数量为k的倍数。魔理沙的一本书混入其中,求这本书的编号。输入n和k,以及n本书的编号。输出混入书的编号。由于n可达1e7,需高效算法。解法包括拆位法(位运算)和字符串拆分法(处理大数)。核心思路是统计每位或每段的出现次数模k,剩余1的位置即为结果。代码示例展示了字符串拆分法,将大数拆分为7段3位数字处理,空间复杂度O(7000),时间复杂度O(7n)。

2026-03-21 16:45:00 399 1

原创 【图论 前缀和】P8779 [蓝桥杯 2022 省 A] 推导部分和|普及+

本文探讨了蓝桥杯2022省赛A组题目P8779的解法,该题要求根据已知的部分和推导出其他区间的部分和。文章提出了多种解决方案:1)利用树上倍增和ST表建立有向图关系;2)通过并查集处理连通区域;3)采用DFS序建立前缀和。核心思想是将已知部分和转化为图论问题,通过路径求和确定未知区间和。对于无法确定的情况输出"UNKNOWN"。文章提供了详细的算法思路和C++代码实现,适用于大规模数据处理(N,M,Q≤10^5)。

2026-03-21 07:00:00 644 1

原创 【树的直径 离散化】 P7807 魔力滋生|普及+

本文研究如何从给定的扩展树T'中还原原始树T。题目要求通过逆向操作,找到使原始节点数n最大的解。关键点在于:当k>0时,原始树T中的节点度数不超过2,形成链式结构;当k=0时,可通过树的直径确定原始链。算法步骤包括:1)删除度数为1的叶子节点;2)对剩余节点进行离散化处理;3)根据k值选择相应策略处理链式结构。特别地,当k=0时可直接利用树的直径性质求解。时间复杂度为O(m),适用于大规模数据。

2026-03-20 16:30:00 709 1

原创 【动态规划 】P7972 [KSN2021] Self Permutation|普及+

摘要:本题要求计算给定排列通过删除相邻较大元素后可能得到的序列数量。关键思路是利用动态规划和单调栈优化。定义dp[i]表示以a[i]结尾的子序列数,通过维护单调栈来高效计算满足条件的转移。对于每个元素j,分两种情况处理:当a[j]是区间最小值时,利用栈中合法元素;否则通过树状数组快速求和。最终答案为所有合法序列数之和,时间复杂度优化至O(n logn)。

2026-03-20 08:00:39 370 2

原创 【博弈论】P8144 [JRKSJ R4] BBWWBB|普及+

摘要:本文研究了基于博弈论的棋子移动问题,分析了黑方和白方在特定规则下的最优策略。通过推导发现,游戏能否无限进行取决于初始布局和先手优势:当白棋先手且满足特定相邻条件时,可以通过兑子策略实现无限游戏;否则游戏将有限结束。代码实现了快速判断游戏是否会无限进行的功能,适用于大规模输入数据。

2026-03-19 16:45:00 824 5

原创 【高等数学】四,不定积分

本文系统介绍了不定积分的核心概念与计算方法。首先阐述了原函数与不定积分的定义,给出了基本积分表和不定积分的线性性质。重点讲解了换元积分法,包括第一类换元法(凑微分法)和第二类换元法(变量代换法),通过典型例题展示了如何运用三角函数代换等方法求解复杂积分。最后介绍了分部积分法的原理和应用实例,如求解多项式与三角函数、指数函数乘积的积分。全文通过大量实例演示了不同积分方法的实际应用技巧,为掌握积分计算提供了系统指导。

2026-03-19 07:00:00 6797 63

原创 【栈】P8430 [COI 2020] Zagrade|普及+

如果s不是合法串,则sta中是未知元素,不一定是(。如果s[sta.top(), i] 是合法串,则s[i]是), s[sta.top()]。栈可能非空,说明相邻两项都不是合法串,说明)在前,(在后。如果是),当前)对应的(在栈顶,不入栈且出栈。sta初始只有一个元素0,i = 1 to n-1,如果s[sta.top(), i] 是合法串,则当前是),否则是(。现在他们拥有了大量的计算机密码,并且正在开发一些相当复杂的工具,来破坏受密码保护的系统。输出来发送查询请求。对应的是整个串,当然是合法的。

2026-03-18 16:45:00 400 1

原创 【排列】P9053 [PA 2021] Ranking sklepów internetowych|普及+

本文研究了一个关于排列区间权值计算的问题。给定长度为n的排列a,定义区间[l,r]的权值为区间长度x加上两倍的中位数y。题目要求找出所有区间中权值的最大值及其出现次数。 关键思路是:对于不同长度的区间,最大权值总是1+2n。要取到最大权值,区间必须包含排列中最大的(n+2)/2个数。通过分析这些数的位置关系,可以计算满足条件的区间数量。 算法实现上,通过维护最大数的位置范围,计算每个可能长度x下满足条件的区间数。最终输出最大权值1+2n及其出现次数。该方法高效处理了大规模数据(n≤10^6)的情况。

2026-03-18 07:00:00 370 3

原创 【枚举】P6786「SWTR-6」GCDs & LCMs|普及+

题目要求从给定序列中选出满足特定条件的数,使这些数之和最大化。关键在于发现选出的数必须构成一个等比数列,公比为3/2。通过分析发现,只有满足条件(c-1)*(d-1)=2的数对才能被选中,即c=2,d=3。因此,有效数列中的每个数必须是前一个数的3/2倍。 解法步骤: 统计每个数的出现次数 按升序处理每个数i 若i是3的倍数,则累加i的贡献和前驱数(2i/3)的贡献 否则仅累加i本身的贡献 记录过程中的最大值 时间复杂度O(nlogn),空间复杂度O(n)。该算法高效地利用了哈希映射和排序来处理大规模数据。

2026-03-17 16:45:00 750 4

原创 【动态规划 前缀和】# P6146 [USACO20FEB] Help Yourself G|普及+

本文讨论了P6146 [USACO20FEB] Help Yourself G问题的动态规划解法。题目要求计算所有线段子集的复杂度之和,其中复杂度定义为并集形成的连通块数量。作者尝试了多种动态规划思路,包括按右端点排序、前缀和优化等,最终发现需要统计不与当前线段交叉的前置状态。核心思路是预处理不交叉区间数,利用快速幂计算可能组合数。代码实现了基于线段排序和前缀和的动态规划算法,处理大规模数据时效率较高。

2026-03-17 07:00:00 385 2

原创 【数论 质因数分解】P9179 [COCI 2022/2023 #5] Logaritam|普及+

本文讨论了COCI竞赛题目P9179中的对数序列问题。关键结论包括:1) 序列首元素必须为0,否则无解;2) 修改某元素x会连带影响其质因数对应的元素;3) 修改x的最大质因数y会导致n/y个元素需要修改。代码部分展示了输入输出优化类模板,用于高效处理大规模数据。该问题通过数论分析得出最小修改次数,对于无法修复的情况输出-1。

2026-03-16 16:30:00 424 3

原创 【超音速专利 CN117129477A】一种适于双极板外观缺陷的检测方法、系统、装置及平台

本发明公开了一种双极板外观缺陷的智能检测方法及系统,申请号CN2023107059594。该方法通过获取待检测双极板的料位数据生成传送控制指令,实时采集传送过程中的图像数据并分类处理,构建训练模型进行缺陷检测,最后根据检测结果自动筛选合格产品。系统包括数据生成单元、检测单元和控制单元,配套的检测装置采用可调节相机阵列和翻转机构,实现双极板多角度自动化检测。该技术方案解决了传统人工检测效率低、无法全面检测各类外观缺陷的问题,显著提升了双极板外观缺陷检测的自动化水平和检测精度。

2026-03-16 07:00:00 1045 48

原创 【巴什博弈 线性筛】P8901 [USACO22DEC] Circular Barn S|普及+

摘要 本文分析了USACO 2022年12月比赛中的环形牛棚博弈问题。题目描述两位农夫在环形牛棚的N个房间中轮流移除奶牛,每次可以移除1或一个质数数量的奶牛。当房间奶牛数为0时,当前行动者失败。研究发现:对于单个房间,若奶牛数是4的倍数则先手必败;否则先手必胜。通过线性筛预处理质数,计算每个房间失败时的行动次数,取最小奇偶性决定胜负。算法时间复杂度为O(nlogn),适用于大规模数据。代码实现包含输入输出优化和博弈逻辑处理。

2026-03-14 16:45:00 422 5

原创 【DFS 字典树】P10388 [蓝桥杯 2024 省 A] 团建|普及+

本文探讨了蓝桥杯2024省赛题目《团建》的解法。题目要求计算两棵树从根到叶路径序列的最长公共前缀。解题思路如下: 使用邻接表存储树结构 对第一棵树进行DFS遍历,构建字典树(前缀树),利用哈希映射记录子节点 对第二棵树进行DFS遍历,在字典树中匹配路径,当遇到不匹配节点时终止该分支的搜索 关键点在于: 字典树的高效构建和查询 深度优先搜索遍历树结构 利用哈希映射优化字典树存储 该方法的时间复杂度主要取决于字典树的构建和查询效率,能够高效处理大规模数据(n,m≤2×10^5)。示例代码展示了如何实现这一算法。

2026-03-14 07:00:00 443 2

原创 【构造 前缀和】P8902 [USACO22DEC] Range Reconstruction S|普及+

题目要求根据给定的子数组全距信息重构原始数组。通过分析数组性质,可以得出以下结论:1)数组元素整体加减不影响全距;2)元素取反不影响全距;3)相邻元素的差值绝对值由特定条件决定。基于这些性质,我们可以从a[0]=0开始,逐个确定后续元素的值,通过检查与给定全距的一致性来确保解的正确性。时间复杂度为O(n²),其中n是数组长度。代码实现了这一思路,通过维护前缀极值来高效验证候选解的合法性。

2026-03-13 16:45:00 354

原创 【构造 分类讨论】P9326 [CCC 2023 S3] Palindromic Poster|普及+

本文讨论了如何构造满足特定回文条件的N×M字母矩阵。关键思路是利用a、b、c三种字符进行构造,通过分类讨论不同情况: 当行回文数R等于M且列回文数C等于N时,全部填充a即可。 当R≠M且C≠N时,前R行前C列填a,其余填b。 当M=R但N≠C时,需考虑C的奇偶性,通过对称填充a来控制列回文数。 当N=C但M≠R时,类似处理行回文数。 特别情况包括:当N=M=1时直接填a;当要求0行0列回文时需特殊构造;当仅要求0行或0列回文时需调整填充方式。通过这些分类处理,可以构造出满足条件的矩阵或判断无解情况。

2026-03-13 07:00:00 360 2

原创 【动态规划】P8801 [蓝桥杯 2022 国 B] 最大数字|普及+

摘要 题目要求通过有限次数的加1和减1操作,将给定数字N的各位数字调整到最大值。核心思路是利用动态规划,状态表示为dp[m][a][b],表示处理前m位后剩余a次加法和b次减法时的最大数字。转移时对每位数字只进行全加或全减操作,优先将高位数字调整到9。算法时间复杂度为O(MAB),其中M是数字位数,A和B是操作次数限制。关键性质是:1) 高位优先调整;2) 同一位不会同时进行加减操作。最终返回所有可能状态中的最大值。

2026-03-12 16:45:00 355 1

原创 【AutoCAD】eKeyNotFound

摘要:AutoCAD出现"eKeyNotFound"错误提示,主要发生在两种场景:一是引用的层名或标注名不存在;二是新建实体时层名设置错误。解决方法有两种:1)直接设置LayerId属性;2)先将实体添加到数据库再修改层名。关键是要确保实体已关联数据库才能正确查询层名。

2026-03-12 07:00:00 1229 57

原创 【前缀和】B4157 [厦门小学生 C++ 2023] 数据核心| 普及+

本文摘要: 题目描述了一个数据核心矩阵问题,要求对给定的n×m矩阵进行多次查询,每次查询以(x,y)为左上角的子矩阵的最大运算力。解题思路采用二维前缀和优化,通过动态规划预处理每个可能子矩阵的最大和。时间复杂度为O(RC√RC),适用于大规模数据。代码实现包括输入处理、动态规划计算和结果输出,支持高效处理100,000规模的矩阵和查询。

2026-03-11 16:45:00 710

原创 【字典树 回溯】P7210 [COCI 2020/2021 #3] Vlak|普及+

摘要 题目描述两位玩家Nina和Emilija通过轮流在单词末尾添加字母进行游戏,要求每次添加后单词必须是各自喜爱歌曲中某个单词的前缀。无法操作的玩家输。解决方案是构建两个字典树分别存储两人的单词集,并通过回溯算法判断胜负。核心思路是:当前玩家若存在子节点而对手没有则获胜,否则递归检查共同存在的字符。时间复杂度为O(|S|),其中|S|是单词总长度。代码实现使用模板化的字典树结构,支持高效的前缀查询和节点管理。

2026-03-11 07:00:00 425 6

原创 【中心扩展】P6297 替换|普及+

本文研究了贝壳项链中"可观赏"区间的最大观赏指数问题。给定n个贝壳及其好看程度a_i,定义对称区间为满足特定条件的区间,且最多允许k次替换使区间对称。观赏指数定义为区间内贝壳好看程度的乘积。采用中心扩展法枚举所有可能的回文区间,使用双精度对数(log)记录乘积大小以避免大数计算,同时用模数记录实际值。通过比较对数大小确定最大观赏指数,最终输出模1e9+7的结果。该方法有效解决了大数乘积比较问题,时间复杂度为O(n^2)。样例测试表明算法正确,适用于n≤1000的数据规模。

2026-03-10 17:00:00 392 3

原创 【前缀和 分治法】P11293 [NOISG2022 Qualification] L-Board|普及+

本文摘要: 题目要求在n×m的棋盘上寻找L型区域,使覆盖数字总和最大化。L型区域由三个点确定,可旋转四种方向。解题采用分治法和前缀和优化:1)预处理每行的左右方向最大前缀和;2)转置矩阵处理列方向;3)合并结果求最大值。核心算法通过动态规划计算每个位置的最大前缀和,时间复杂度O(nm),适用于大规模数据(n,m≤1000)。样例验证了算法正确性,如2×2棋盘最大和为15。

2026-03-10 07:00:00 347 2

原创 【数论 扩展欧几里得 中国剩余定理】P12364 [蓝桥杯 2022 省 Python B] 寻找整数|普及+

本文摘要:题目要求寻找满足48个同余条件的最小正整数解。解题思路基于数论中的中国剩余定理和扩展欧几里得算法。通过逐步合并同余方程,将两个同余条件转化为一个更一般的同余方程,最终求得满足所有条件的最小解。核心算法处理同余方程组的合并过程,利用最大公约数和最小公倍数的性质,通过循环迭代求解。代码实现中使用了栈结构来处理同余方程的合并过程,最终输出满足条件的最小正整数解。

2026-03-09 17:00:00 825 5

原创 【超音速专利 CN 116833831 A】适用于镁合金压铸

本发明公开了一种适用于镁合金压铸件的打磨抛光方法、装置及系统。该方法包括:通过真空吸附夹具定位镁合金压铸件,采用气缸传送实现工位转移;通过KK模组带动旋转毛刷进行表面粗抛和精抛,配合压力调节气缸控制抛光参数;采用无杆气缸实现夹具平移,完成多工位抛光处理;实时采集料位数据和表面处理数据,通过数据处理判定抛光质量是否符合预定阈值。装置包括机架、安装架、表面抛光装置、上料装置、侧面抛光装置和中转装置等模块。该系统可实现镁合金压铸件全自动打磨抛光,具有快速装拆毛刷、粉尘防护和精确定位等特点,提高了抛光效率和质量稳定

2026-03-09 07:00:00 1292 65

原创 【动态开点差分数组】P6641 [CCO 2020] A Game with Grundy|普及+

摘要 本文解决[CCO 2020]竞赛题"A Game with Grundy",要求计算在平面直角坐标系上,站在不同位置时被N个人视野覆盖的情况。每个人位于(xi,0)点,视野范围由两条斜率为±vi/hi的射线构成。我们需要计算在y=Y高度上,从L到R区间内,被0到N个人视野覆盖的位置数量。 核心解法是使用动态开点差分数组:首先计算每个人视野在y=Y高度的左右边界,然后通过差分数组记录覆盖情况,最后统计被不同人数覆盖的位置数。时间复杂度为O(NlogN),适用于N≤10^5的大数据量。

2026-03-08 17:00:00 684

原创 【模拟】# P7411 [USACO21FEB] Comfortable Cows S|普及+

本文介绍了USACO竞赛中关于奶牛舒适度问题的解法。题目要求在二维棋盘上逐步添加奶牛,每次添加后需要计算使所有奶牛都不"舒适"(即不与恰好三头奶牛相邻)所需额外添加的最小奶牛数量。 核心解法采用BFS和哈希映射技术,通过维护每个奶牛邻居的状态来动态调整。每次添加新奶牛后,检查其周围邻居状态,必要时添加新奶牛来破坏"舒适"条件。时间复杂度为O(N),空间复杂度为O(N)。 该方法高效处理了大规模输入(N≤10^5),并正确计算了每一步需要额外添加的奶牛数量。示例输入输出

2026-03-08 07:00:00 361 1

原创 【BFS 逆向思考】P9178 [COCI 2022/2023 #5] Diskurs|普及+

摘要 题目要求计算n个m位二进制数两两之间的最大汉明距离。汉明距离定义为两个数二进制表示中不同位的数量。通过逆向思维,将每个数视为图节点,相邻节点为仅有一位不同的数。利用BFS算法计算每个数到其他所有数的最短路径(即最小汉明距离),最终答案为m减去该最小距离。该方法时间复杂度为O(nm),适用于m≤20的情况。输入输出样例验证了算法的正确性。

2026-03-07 16:45:00 370 1

原创 【动态规划 排序】P9102 [PA 2020] Cukierki|排序

本文摘要: 题目要求计算能够满足特定条件的非空糖果袋子子集数量。给定n袋糖果,每袋有a_i个糖果,需要找出所有子集,使得对于任意1到子集总和的整数y,都能通过子集中某些袋子的组合恰好得到y。 解题思路: 将糖果袋按升序排序 使用动态规划,状态dp[n][sum]表示前n袋糖果能否组成sum 关键转移条件:当新加入的袋子糖果数a_i ≤ 当前可表示的最大数+1时,可以扩展表示范围 最终统计所有满足条件的子集数量,对10^9+7取模 算法优化:通过排序和动态规划将复杂度控制在O(n*max(a)),并使用滚动数

2026-03-07 07:00:00 382 2

原创 【拆位法 分块】P7282 [COCI 2020/2021 #4] Hop|普及+

本文提出了一种解决青蛙跳跃问题的分类方案。题目要求将n片百合花上的单调递增整数序列分配给三只青蛙,确保没有青蛙能连续跳跃超过3次。核心思路是通过位运算将数值按4位一组分块,将数值区间划分为16个小块和4个中块。对于任意两个满足整除关系的数对(i,j),根据它们所在块的相同性分配颜色:同小块为红色(1),同中块不同小块为绿色(2),否则为蓝色(3)。该方案保证了青蛙的跳跃路径最多3次连续移动,符合题目要求。代码实现中通过右移4位确定块号,并据此输出分类结果。该方法有效利用了数值的指数增长特性,确保了分类方案的

2026-03-06 17:00:00 397

原创 【nim 博弈论 位运算】P7589 黑白棋(2021 CoE-II B)|普及+

本文研究了黑白棋游戏的必胜策略问题。通过分析游戏规则,发现该问题可以转化为经典的Nim博弈模型。关键性质包括:1)后退操作不影响胜负,可以忽略;2)每条直线上的棋子间距减1对应Nim游戏中的石子数;3)异或和为零时当前玩家必败,否则必胜。基于这些性质,给出了简洁的解法:计算所有直线棋子间距减1的异或和,若结果非零则Alice必胜,否则必败。该解法时间复杂度为O(n),适用于大规模数据。

2026-03-06 07:00:00 1190 50

原创 【数论】P9034 「KDOI-04」Again Counting Set|普及+

本文研究了集合计数问题,给出了满足特定条件的整数集合数量的计算方法。通过分析集合的最小值、最大值和mex等性质,推导出当k=2时有1种解,当k≥4时解的数量与n和k的关系式。代码实现了基于数学推导的快速计算,能够处理大规模输入数据(n,k≤10^18)。测试样例验证了算法的正确性,展示了不同n和k组合下的计算结果。该算法通过分类讨论和数学公式直接计算答案,避免了暴力枚举,具有较高的时间效率。

2026-03-05 07:00:00 381 4

原创 【容斥原理】P9118 [春季测试 2023] 幂次|普及+

题目摘要:给定正整数n和k,统计1到n中能表示为a^b形式(a,b为正整数且b≥k)的数的个数。当k=1时所有数都符合;k≥2时需要特殊处理。关键点包括:1) 幂次上限为64(防止溢出);2) 使用容斥原理避免重复计数;3) 处理精度问题(如pow计算时的取整);4) 分情况处理k=2和k≥3的情况。样例展示了不同k值下的结果差异。

2026-03-04 16:45:00 376 1

喜缺全书算法册 C++实现

电子书和博文的分工。电子书以:原理、正确性证明、总结为主;博文(题解)以思路、源码、封装类(模板)、测试用例、流程图为主。 当前阶段:以二分查找为主,前缀和为辅,之后会有其它算法的。文字算法见我的博文,视频算法见我的学院课程。 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,两者长度都为 n 。每次操作中,你可以选择交换 nums1 中任意两个下标处的值。操作的 开销 为两个下标的和。你的目标是对于所有的 0 <= i <= n - 1 ,都满足 nums1[i] != nums2[i] ,你可以进行 任意次 操作,请你返回达到这个目标的 最小 总代价。请你返回让 nums1 和 nums2 满足上述条件的 最小总代价 ,如果无法达成目标,返回 -1 。 给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i ,高度为 heights[i] 。 如果以下条件满足,我们称这些塔是 美丽 的:

2023-09-17

喜缺全书之平凡的经历最新版

《闻缺陷则喜》这本书由何志丹与魏家瑜共同创作,其核心理念是通过暴露和面对问题,促进个人和团队的成长。书名源于作者们对于缺陷的积极态度,他们认为缺陷是学习和进步的契机,而不是阻碍。在当前知识爆炸的时代,分享和交流成为提升效率的关键。 书中涵盖的工作经历部分,作者强调了工作中遇到的挑战和陷阱,这些经历不仅对于技术开发者,如C/C++/VC程序员,具有宝贵的参考价值,也适用于任何行业。作者提到,许多工作中需要但网络上难以找到的信息,正是他们书籍想要填补的知识空白。他们提倡通过阅读、实践和再传授来深化理解和掌握知识,比如,通过反复阅读多本书籍,甚至制作教学视频,以教促学。 生活中的点滴和女儿的成长部分,反映了作者对个人生活和家庭教育的关注。这部分内容可能包含如何平衡工作与家庭,以及如何培养孩子独立思考和解决问题的能力。作者的人生态度和教育观念,可能会给读者提供关于如何在生活中学习和成长的新视角。 投资理财的亏损与教训部分,则揭示了作者在财务管理和投资上的经验和反思。他们可能分享了投资失败的案例,从中提炼出的教训,旨在帮助读者避免同样的错误,提高投资决策的明智程度。这部分内容对于希望提升理

2023-08-18

闻缺陷则喜2021九月版

主要增加:C#调用托管C++,托管C++调用C++

2021-09-11

朴素迪氏最短单源路径的原理及C++源码及测试用例

Dijkstra算法,翻译为迪杰斯特拉或狄克斯特拉。在下驽钝,记不住如此长的翻译,故简称迪氏。 3.1.时间复杂度 O(n2),端点数的平方。 3.2.使用前提 边的权为正。可以非连通,非连通的距离为-1。

2023-09-30

01BFS最短距离原理和C++实现

n个端点的无向图,编号范围[0,n)。Edges0表示{{n1,n2},...{n3,n4}}表示n1和n2,n3和n4之间有路联接。Edges1表示{{n1,n2},...{n3,n4}}表示n1和n2,n3和n4之间有损坏的路连接。要想让s和d之间至少有一条通道,最小需要维修多少条路。如果无法到达,请返回-1。可能有环,但无自环,重边,可能不联通。

2023-09-29

深度优先搜索(BFS)的原理和C++实现

n个端点的无向图,编号范围[0,n)。每个端点最多4条出边。edges表示{{n1,n2},...{n3,n4}}表示n1和n2,n3和n4之间有边联接。求s到d的最少需要经过多少条边。如果无法到达,请返回-1。可能有环,但无自环,重边,可能不联通。

2023-09-28

美丽塔单调栈O(n)解法

给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i ,高度为 heights[i] 。 如果以下条件满足,我们称这些塔是 美丽 的: 1 <= heights[i] <= maxHeights[i] heights 是一个 山状 数组。 如果存在下标 i 满足以下条件,那么我们称数组 heights 是一个 山状 数组: 对于所有 0 < j <= i ,都有 heights[j - 1] <= heights[j] 对于所有 i <= k < n - 1 ,都有 heights[k + 1] <= heights[k] 请你返回满足 美丽塔 要求的方案中,高度和的最大值 。

2023-09-27

较难算法: 美丽塔 时间复杂度O(nlongn)

给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i ,高度为 heights[i] 。 如果以下条件满足,我们称这些塔是 美丽 的: 1 <= heights[i] <= maxHeights[i] heights 是一个 山状 数组。 如果存在下标 i 满足以下条件,那么我们称数组 heights 是一个 山状 数组: 对于所有 0 < j <= i ,都有 heights[j - 1] <= heights[j] 对于所有 i <= k < n - 1 ,都有 heights[k + 1] <= heights[k] 请你返回满足 美丽塔 要求的方案中,高度和的最大值 。

2023-09-24

让数组不相等的最小总代价

让数组不相等的最小总代价 可运行源码,VS2022 C++17 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,两者长度都为 n 。每次操作中,你可以选择交换 nums1 中任意两个下标处的值。操作的 开销 为两个下标的和。你的目标是对于所有的 0 <= i <= n - 1 ,都满足 nums1[i] != nums2[i] ,你可以进行 任意次 操作,请你返回达到这个目标的 最小 总代价。请你返回让 nums1 和 nums2 满足上述条件的 最小总代价 ,如果无法达成目标,返回 -1 。

2023-09-23

《闻缺陷则喜》之《主册》

闻缺陷则喜 1 第一章:平凡的经历 5 第二章:观念与想法 5 1. 基础 6 1.1. 认知鸿沟 6 2. 传播 6 3. 沟通 6 3.1. 淡化对错 6 3.2. 不要随意批评别人 6 3.3. 参与感 6 3.4. 如果错了,马上认错 7 3.5. 从别人的立场说服对方 7 3.6. 具体到场景 7 4. 交往与合作 7 4.1. 双赢思维 7 4.2. 合作层次 8 4.3. 能力+信息(情报)+资源=成就 8 5. 工作相关 8 5.1. 金融骗局 8 5.2. 对小白而言创业比股票危险的多 9 5.3. 投资比创业稳妥的多 9 5.4. 程序员干不到30岁 9 5.5. 忠诚度与能力 10 5.6. 拒绝无意义加班 10 5.7. 内卷的历史 11 5.8. 关于社保 11 6. 家庭相关 12 6.1. 我的遗产 12 6.2. 金钱观 12 6.3. 借贷观 13 6.4. 女儿的婚姻 13 6.5. 轶事 14 6.6. 生育观 15 6.7. 教育观 15 6.8. 不要因为担心亲友不舒服,而不指出错误 16 7. 工作技巧 16 7.1. 八二原理 16 8.

2022-09-10

二分查找旋转数组源码和视频

包括视频和三个版本的源码(初始、寻找右数组左边界、完成) 已知整数数组nums,先按升序排序后,再旋转。旋转k位后,元素分别为nums[k],nums[k+1]...nums[0]...nums[k-1]。请查找target 是否存在,如果存在返回所在索引;否则返回-1。假定nums没有重复的元素。 假定排序后的数组为{1,2,3,4,5}。 旋转0位:不变。 旋转1位:{2,3,4,5,1} 旋转2位:{3,4,5,1,2} 旋转3位:{4,5,1,2,3} 旋转4位:{5,1,2,3,4} 1.解题思路 观察后,可以得到如下结论: 旋转数组,可以拆分成左右两个升序数组,且左数组的任意元素都大于右数组的任意元素。 分两步: 一,找到数组的分界线RBegin,[0,RBegin)是左数组,[RBegin,n)是右数组。特殊情况:只有一个升序数组,则RBegin为0,左数组为空。 如果是小于等于nums.back(),在右边找;否则在左边找。升序寻找元素之前已经讲过了,就不累赘了。

2023-08-20

C# 获取C++的连续数据

C# 获取C++的连续数据。 两种方式:1,返回C++指针,2,将值存到C#的数组中。

2022-04-02

闻缺陷则喜版本号20220123

包括:问题定义、系统分析、架构、概要设计、详细设计、测试等!

2022-01-23

闻缺陷则喜2021年12月26.doc

闻缺陷则喜,本人拙作,注将软件工程。

2021-12-26

闻缺陷则喜20211205

包括:问题定义、系统分析、架构、概要设计、详细设计、测试等!

2021-12-07

Windows性能监控工具Perfmon使用

Windows性能监控工具Perfmon使用

2021-10-31

关于halcon膨胀腐蚀开闭.doc

关于halcon膨胀腐蚀开闭

2021-11-14

简单的C#类 生成对应的C#类

开发工具: C#2013 功能: 针对简单的C#类,生成对应的非托管C++类,并生成托管C++的转换函数。 应用场景: 界面层、数据层C#,逻辑层C++。 简单的C#类:类型只包括 double string List

2021-11-07

保存文件的同时删除文件,保存用时会略微升高

保存文件的同时删除文件,保存用时会略微升高。没必要花大功夫专门处理 保存500文件用时(毫秒):30906 删除文件同时,保存500文件用时(毫秒):30263 删除500文件用时(毫秒):363 保存500文件用时(毫秒):29155 删除文件同时,保存500文件用时(毫秒):29258 删除500文件用时(毫秒):426 保存500文件用时(毫秒):27992 删除文件同时,保存500文件用时(毫秒):29068 删除500文件用时(毫秒):686 保存500文件用时(毫秒):29172 删除文件同时,保存500文件用时(毫秒):31837 删除500文件用时(毫秒):337 保存500文件用时(毫秒):29373 删除文件同时,保存500文件用时(毫秒):29563 删除500文件用时(毫秒):321 保存500文件用时(毫秒):29663 删除文件同时,保存500文件用时(毫秒):30180 删除500文件用时(毫秒):350

2021-10-11

多线程样例一 读写参数文件

事情起因: 修改配置后,C++函数取读配置xml时,相机缓存满了而引起崩溃。几率发生。 解决思路: 读文件费时间,所以开一个线程读文件。 抽象后的类似demo: 假定读文件需要0.6秒,图像处理(用存文件代替)需要0.5秒,各执行100次。 类和函数 读取文件函数: 一,List<int>增加本序号(0开始)。 二,随机生成5000整数,加到list<int>中。 三,写文件(文件名为序号,如0.txt),文件夹File。 四,Sleep(600)。 五,记录日志:本函数开始执行 时间,结束时间,序号。 六,复制List<int>到参数。 模拟图像处理函数: 一,复制参数 二,参数保存到文件,文件名list<int>第一个int,文件夹img。 三,Sleep(500)。 六,记录日志:本函数开始执行 时间,结束时间,序号。 参数类(跨线程): 一,从list<int>复制参数。 二,复制数据到list<int>。 线程: 启动线程“读取参数”线程:执行100次 读取参数功能。 启动线程“模拟图像处理”线程:执行100次 模拟图像处理。 运行预期结果: File文件夹中有0到100共101个文件。 img有约80个文件。 img有的文件,File文件夹中一定有,且完全相同。用文件夹比较工具(如:BCompare)查看。 查看日志:“读取参数”线程约60秒完成,模拟图像处理”线程约50秒完成。

2021-09-09

精通或熟练:软件架构、C++、C#、图形学(CAD开发、机器视觉)疯狂复习:计算几何、高等数学、线性代数

内容概要:本文为一份个人技术履历文档,详细介绍了何志丹在CAD二次开发、软件架构设计、C++/C#编程、机器视觉(Halcon)等领域的丰富经验与项目成果。其核心技术能力涵盖AutoCAD插件开发(ObjectArx)、混合编程架构设计、工业检测软件系统构建、算法优化及软件稳定性保障,尤其在太阳能板和锂电池瑕疵检测行业有深度实践。文中列举了多个独立负责或主导的项目,如消防水管设计图转生产图插件、“月牙”型零件排布优化、DIY家具定制软件等,展示了从需求分析、架构设计到编码实现的全流程能力,并强调对崩溃处理、内存泄漏、团队协作机制的设计考量。同时提及个人在力扣竞赛中的优异表现,体现扎实的算法功底。; 适合人群:具备一定C++/C#开发基础,从事工业软件、CAD二次开发、机器视觉或软件架构工作的中高级研发人员及技术管理者。; 使用场景及目标:①学习CAD插件开发(尤其是AutoCAD NetAPI与ObjectArx)的实际工程案例;②借鉴大型工业软件的架构设计理念,如模块解耦、容错机制、混合编程实践;③了解如何在实际项目中提升软件健壮性、管理技术风险与团队扩展节奏。; 阅读建议:此文档适合作为资深开发者求职参考或技术方案设计的实战范本,建议结合自身项目痛点,重点研读其架构决策、异常处理机制和跨语言集成方案,吸收其“稳中求进”的工程思维。

2025-09-27

亲士CAD工具箱支持CAD2013及以上

支持CAD2013及以上版本,不支持CAD2012及以下版本。一,在确保文本、多文本中心不变的情况下,修改对齐方式和字号。二,从txt选择文字转成文本或多文本。三,若干个三维零件。

2026-01-02

本博文算法对应源码单元测试用例

电子书、博文和附录分工。电子书以总结、原理、正确性证明为主;博文(题解)以思路、源码、封装类(模板)、测试用例、流程图为主。附录:封装好的类、小题题解、很长的源码和单元测试。 本书针对读者:刚刚入职的软件工程师,假定已经学完了“C++”和“算法与数据结构基础”。工程师和学生不同,工程师的首要目标的实用。工程师用到的知识是未知的,很多都是临时用一下,之后几年甚至一辈子都不会用到。受精力的限制,不可能将所有遇到的知识全部学完。本文会有超多用例,方便工程师从最相近的样例开始修改。所以,本文先讲如何使用,再讲原理,最后讲样例;设计(如:流程图)和源码会作为附录提供。

2024-07-05

位运算、状态压缩、枚举子集汇总.html

位运算、状态压缩、枚举子集汇总.html

2024-04-27

本博客配套流程图,会经常更新

Bob 站在单元格 (0, 0) ,想要前往目的地 destination :(row, column) 。他只能向 右 或向 下 走。你可以为 Bob 提供导航 指令 来帮助他到达目的地 destination 。 指令 用字符串表示,其中每个字符: 'H' ,意味着水平向右移动 'V' ,意味着竖直向下移动 能够为 Bob 导航到目的地 destination 的指令可以有多种,例如,如果目的地 destination 是 (2, 3),"HHHVV" 和 "HVHVH" 都是有效 指令 。 然而,Bob 很挑剔。因为他的幸运数字是 k,他想要遵循 按字典序排列后的第 k 条最小指令 的导航前往目的地 destination 。k 的编号 从 1 开始 。 给你一个整数数组 destination 和一个整数 k ,请你返回可以为 Bob 提供前往目的地 destination 导航的 按字典序排列后的第 k 条最小指令 。

2024-04-24

利用二分查找解决H指数问题

利用二分查找解决H指数问题。

2024-01-01

搜索矩阵C++实现:二分查找Z形查找

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。

2023-12-17

长度最短的子数组C++实现

给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: 输入:target = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。 示例 2: 输入:target = 4, nums = [1,4,4] 输出:1 示例 3: 输入:target = 11, nums = [1,1,1,1,1,1,1,1] 输出:0 提示: 1 <= target <= 109 1 <= nums.length <= 105 1 <= nums[i] <= 105

2023-12-10

[二分查找双指针]LeetCode881: 救生艇

给定数组 people 。people[i]表示第 i 个人的体重 ,船的数量不限,每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。 返回 承载所有人所需的最小船数 。

2023-12-03

两数之和 - 输入有序数组

给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。 以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。 你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。

2023-11-26

C++二分查找算法:132 模式

给你一个整数数组 nums ,数组中共有 n 个整数。132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k] 组成,并同时满足:i < j < k 和 nums[i] < nums[k] < nums[j] 。 如果 nums 中存在 132 模式的子序列 ,返回 true ;否则,返回 false 。

2023-11-12

C++算法:第 N 位数字原理、源码、测试用例

给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字。 示例 1: 输入:n = 3 输出:3 示例 2: 输入:n = 11 输出:0 解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是 0 ,它是 10 的一部分。 提示: 1 <= n <= 231 – 1

2023-11-05

C++二分查找算法应用:最长递增子序列 原理、源码、测试用例

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1: 输入:nums = [10,9,2,5,3,7,101,18] 输出:4 解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。 示例 2: 输入:nums = [0,1,0,3,2,3] 输出:4 示例 3: 输入:nums = [7,7,7,7,7,7,7] 输出:1 参数范围: 1 <= nums.length <= 2500 -104 <= nums[i] <=104

2023-10-29

二分应用:峰值查找 原理、源码、测试用例

1. 题目 长度为n的数组nums,请返回任意一峰值的索引。符合以下条件之一i便是峰值的索引。 n等于1 i等于0 n>1 i等于0 nums[i] >nums[i+1] n>1 i等于n-1 nums[i] > nums[i-1] 0<i<n-1 nums[i]>nums[i-1] nums[i]>nums[i+1] 题目保证nums[i]不等于nums[i+1]。 2. 分析 假定: nums[left,r)符合nums[left]>nums[left-1],且nums[r-1]>nums[r]。显然初始情况nums[0,n)符合。 推论一:如果[left,r)的长度为1,则left就是返回的索引。 推论二:假定left < mid<r。如果mid[mid] > mid[mid-1],则nums[mid,r)也符合假定。如果mid[mid] < mid[mid-1],则nums[left,mid)也符合假定。 推论三:推论二也可以也可以理解成分别抛弃[left,mid)和[mid,r)。令mid = left+(r-left)/2,由于r-left>=2,所以left<mid<

2023-10-22

C++算法:前缀和基础

长度为n的数组nums,共有n+1个以nums[0]开始的子数组。索引范围分别为[0,i),i取值区间[0,n]。preSum[i]记录子数组[0,i)的和。比如:nums = {1,2,3,4},则preSum = {0,1,3,6,10}。通过preSum,我们可以求任意nums的子数组和。子数组[i,j)等于子数组[0,j)减去[0,i),也就是子数组[i,j)的和等于preSum[j] – preSum[i]。如果i等于j,则preSum[i]-preSum[i],和为0,符合计算公式。如果i大于j,则非法,需要提前排除。

2023-10-15

时间复杂度O(40n*n)的C++算法:修改图中的边权

给你一个 n 个节点的 无向带权连通 图,节点编号为 0 到 n - 1 ,再给你一个整数数组 edges ,其中 edges[i] = [ai, bi, wi] 表示节点 ai 和 bi 之间有一条边权为 wi 的边。 部分边的边权为 -1(wi = -1),其他边的边权都为 正 数(wi > 0)。 你需要将所有边权为 -1 的边都修改为范围 [1, 2 * 10^9] 中的 正整数 ,使得从节点 source 到节点 destination 的 最短距离 为整数 target 。如果有 多种 修改方案可以使 source 和 destination 之间的最短距离等于 target ,你可以返回任意一种方案。 如果存在使 source 到 destination 最短距离为 target 的方案,请你按任意顺序返回包含所有边的数组(包括未修改边权的边)。如果不存在这样的方案,请你返回一个 空数组 。 注意:你不能修改一开始边权为正数的边。

2023-10-14

多源最短路径的原理及C++实现

当一层循环执行完后,m_vMat[i1][i2]表示经过[0,i)中的任意个点的最短距离。 初始状态下, m_vMat[i1][i2]表示直达的最小距离,也就是经过0个点。 通过[0,i)中任意个点,i1到i2的最短路径记为PrePathi1i2,通过[0,i+1)中任意个点,i1到i2的距离的路径为Pathi1i2,如果Path不经过Pathi1i2,则和PrePathi1i2相同。如果经过则可以拆分成{i1…i}+{i…i2},显然{i1…i}是PrePathi1i,{i…i2}是PrePathii2,否则替换成PrePathi1i和PrePathii2。 m_vMat同时表示PreMath和Math,如果m_vMat[i1][i]或m_vMat[i][i2]已经更新,会带来错误的结果么?结果是不会,会更新但值不变。 当i1等于i时: m_vMat[i][i2] = min(…, m_vMat[i][i] + m_vMat[i][i2]); 由于m_vMat[i][i]为0,所以右式就是左式。 当i2等于i时,类似。

2023-10-04

堆优化迪氏最短单源路径原理及C++实现

4.1. 时间复杂度 O(ElogE),E是边数。适用与稀疏图。 4.2. 使用前提 边的权为正。可以非连通,非连通的距离为-1。 4.3. 原理 优选队列(小根堆)记录两个数据:当前点到源点距离,当前点。先处理距离小的点;如果距离相等,先处理谁都可以。可以用pair记录,不用重写小于。优先队列只记录如下情况的距离: 一,{0,源点}。 二,任意点的最短距离和可以直达的边。 如果是有向图,则入队数量等于边数,计算出起点最短路径的那一轮。无向图,则翻倍。显然出队数量等于入队数量。优先队列入队和出队时间复杂度都是O(logn),故总时间复杂度为O(nlogn)。

2023-10-03

.有向图计数优化版原理及C++实现

不需要拓扑排序,也不需要并集查找,直接dfs了。完成以下三个职责: 一,DFS那些端点在环上。 二,DFS环上各点此环的长度。 三,DFS非环上各点。

2023-10-02

有向图访问计数的原理及C++实现

现有一个有向图,其中包含 n 个节点,节点编号从 0 到 n - 1 。此外,该图还包含了 n 条有向边。 给你一个下标从 0 开始的数组 edges ,其中 edges[i] 表示存在一条从节点 i 到节点 edges[i] 的边。 想象在图上发生以下过程: 你从节点 x 开始,通过边访问其他节点,直到你在 此过程 中再次访问到之前已经访问过的节点。 返回数组 answer 作为答案,其中 answer[i] 表示如果从节点 i 开始执行该过程,你可以访问到的不同节点数。 2 <= n <= 100000 无自环。

2023-10-01

空空如也

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

TA关注的人

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