- 博客(687)
- 资源 (3)
- 收藏
- 关注
原创 对书稿的不定期更新……
书稿算是完成了第一版的定稿了,已经转成PDF供有需要的朋友免费使用,还请多多提出意见,以便进一步完善。以下是底稿更新的记录,适当的时候再放出第二版的定稿。
2020-03-29 07:18:26
2525
2
原创 我写的书:《C++,挑战编程——程序设计竞赛进阶训练指南》
这是我写的书《C++,挑战编程——程序设计竞赛进阶训练指南》的初稿,欢迎大家提出意见。本书的读者对象为计算机专业(或对ACM/ICPC竞赛感兴趣的其他专业)学生以及编程爱好者。可以作为ACM/ICPC竞赛训练的辅助参考书。本书不是面向初学者的C++语言教程,要求读者已经具备一定的C或C++编程基础,有一定的英语阅读能力,了解基本的数据结构,已经掌握了初步的程序设计思想和方法,具备相应的算法分析...
2019-05-17 10:23:10
18345
79
原创 《挑战编程:程序设计竞赛训练手册》- 题解(全)
PC = Programming Challenges (http://www.programming-challenges.com/)UVa = University of Valladolid Online Judge(http://uva.onlinejudge.org/)《挑战编程:程序设计竞赛训练手册》PDF下载地址(英文版):http://acm.cs.buap.mx
2011-11-16 22:06:17
15613
10
原创 《挑战编程:程序设计竞赛训练手册》- 题解(第一章 - 第八章)
PC = Programming Challenges (http://www.programming-challenges.com/)UVa = University of Valladolid Online Judge(http://uva.onlinejudge.org/)《挑战编程:程序设计竞赛训练手册》PDF下载地址(英文版):http://acm.cs.buap.mx/do
2011-08-28 17:24:12
24597
5
原创 UVa 917 Euro 2004
题目要求模拟欧洲足球锦标赛的排名规则,根据比赛结果对参赛队伍进行排序。排名规则包括积分、净胜球、胜场数、进球数四项指标,若全部相同则进入子联赛模式递归比较。解决方案采用数据结构存储队伍和比赛信息,通过递归分组处理并列情况,最终按字母顺序输出完全并列的队伍。算法时间复杂度在合理范围内,适用于大规模数据。代码实现包括全局数据处理、子联赛计算和递归排名函数,确保严格遵循题目要求的排名优先级。
2025-12-06 18:52:26
200
原创 UVa 814 The Letter Carrier‘s Rounds
本文分析了基于SMTP协议的电子邮件传输模拟问题。题目要求根据给定的MTA信息和邮件消息,模拟发送方与接收方之间的通信过程。关键点包括:MTA数据结构设计(名称和用户集合)、邮件解析(发送者、接收者分组)、SMTP会话流程(HELO、MAIL FROM、RCPT TO、DATA命令处理)以及输出格式规范。实现中使用了map和set进行高效查询,严格遵循通信顺序和错误处理规则(如无效用户返回550但不中断会话)。代码展示了完整的输入处理、邮件分组和SMTP会话模拟过程,确保格式符合每行4空格缩进的要求。
2025-12-06 18:44:21
374
原创 UVa 12424 Answering Queries on a Tree
本文研究了树上动态路径查询问题,支持单点颜色修改和路径颜色频率查询。针对颜色种类较少(1-10)的特点,提出了一种基于树链剖分和线段树的高效解法。算法通过维护10棵线段树(每棵对应一种颜色),利用树链剖分将路径拆分为O(logN)区间,在线段树上统计颜色出现次数。预处理时间复杂度O(N),单次修改O(logN),查询O(10log²N),在N,M≤10⁵时表现良好。实验验证了该方法在处理大规模数据时的有效性。
2025-12-06 17:09:00
391
原创 UVa 12191 File Recover
本文探讨了使用后缀自动机(SAM)高效统计字符串中所有重复子串数量的问题。给定长度≤10^5的字符串,要求找出所有出现至少两次的不同连续子串。传统暴力枚举方法时间复杂度O(n^2)不可行。文章详细介绍了后缀自动机的构建方法,通过状态转移和拓扑排序计算各子串出现次数,最终在O(n)时间复杂度内解决问题。代码实现展示了SAM的构建过程和统计方法,适用于64字符集的大规模字符串处理。该算法不仅高效解决了本题,还可应用于其他字符串匹配和统计问题。
2025-12-06 16:07:17
524
原创 UVa 12546 LCM Pair Sum
本文研究了一个数论问题:给定正整数 ( n ) 的质因数分解,计算所有满足 ( p \le q ) 且 ( \mathrm{lcm}(p,q)=n ) 的数对 ((p,q)) 的和 ( p+q ) 的总和 ( f(n) )。通过定义辅助函数 ( F(n) ) 并推导其闭合公式,利用积性性质将问题分解为各质因子幂的乘积。关键步骤包括推导 ( F(p^a) ) 的表达式、处理模逆元以及修正对称因子。最终算法高效计算 ( f(n) \mod 1000000007 ),时间复杂度为 ( O(C \log a_i)
2025-12-06 15:03:11
309
原创 UVA 1525 Falling Leaves
题目要求根据给定的字母二叉搜索树叶子移除序列重构原始树,并输出其前序遍历结果。核心思路是逆向构造:从最后一轮移除的节点开始(即树的最深节点),按照BST规则依次插入每个字母,确保父节点先于子节点被插入。通过逆序处理输入数据并应用标准BST插入规则,可以唯一确定原始树结构,最后进行前序遍历输出。该算法时间复杂度为O(n²),适用于题目给定的数据规模。
2025-12-06 12:35:23
256
原创 UVa 12216 How Many Bases
给定N、M、T,求有多少个整数进制B(B≥2),使得N^M在B进制下末尾恰好有T个零。问题转化为求满足B^T整除N^M,但B^(T+1)不能整除N^M的B的数量。对N做质因数分解,设a_p = M * v_p(N)。对于每个质因数p,其指数e_p需满足两个条件:T * e_p ≤ a_p(保证整除),且至少存在一个p使得(T+1) * e_p > a_p(保证不整除)。利用容斥原理计算:总方案数 = ∏(⌊a_p/T⌋+1) − ∏(⌊a_p/(T+1)⌋+1),结果对100000007取模。
2025-12-06 09:53:09
849
原创 UVa 10829 L-Gap Substrings
本文研究了如何高效统计字符串中满足特定间隔条件的子串数量。通过分析问题特征,提出了一种基于字符串哈希的优化算法,将时间复杂度从O(n³)降至O(n²)。算法预处理字符串的哈希值,快速比较子串是否相同,并通过合理设置循环边界确保正确性。实验表明该方法能有效处理长度达50,000的字符串,在合理时间内完成计算。对于更大规模数据,建议采用后缀数组等更高级的字符串处理方法。该研究为字符串模式匹配问题提供了一种实用解决方案。
2025-12-06 08:04:59
713
原创 UVa 11539 Another Word Game
本文探讨了一个字符串分段决策问题,旨在通过动态规划和字典树优化求解最大得分。给定一个单词字典和字符串S,需要将S分割为连续不重叠子串,匹配字典单词加分,否则按长度扣分。算法采用Trie树存储字典以加速查询,动态规划状态dp[i]表示处理前i个字符的最大得分。状态转移时枚举所有可能子串,分别处理匹配加分和强制扣分情况,时间复杂度为O(|S|×100)。最终输出dp[|S|]作为答案。代码实现展示了Trie构建、动态规划转移和结果计算过程,适用于大规模数据。
2025-12-05 19:40:21
633
原创 UVa 13017 Canvas Painting
题目要求将一组画布通过分裂操作涂成不同颜色,使消耗的墨水量最小。通过逆向思考,将问题转化为哈夫曼编码模型:每次合并两个最小的画布组,合并成本为组大小之和。使用优先队列实现哈夫曼算法,时间复杂度为O(N log N)。最终所有非叶子节点的累加和即为最小墨水量。
2025-12-05 16:45:13
552
原创 UVa 1707 Surveillance
题目要求用最少数量的摄像头覆盖环形大楼的所有墙壁。将环形问题转化为链式结构后,通过预处理每个摄像头的最远覆盖范围,并利用贪心算法和倍增法优化求解。具体步骤包括:标准化区间、预处理覆盖范围、构建倍增表以快速计算最小覆盖步数。若无法覆盖所有墙壁则输出impossible。算法的时间复杂度为O((n+k) log n),适用于大规模数据。
2025-12-05 16:41:59
313
原创 UVa 1418 WonderTeam
本文研究了巴西联赛中WonderTeam的最差排名问题。通过构造性证明,当队伍数n≥5时,WonderTeam在满足胜场最多、进球最多、失球最少三个绝对条件的同时,可以跌至最后一名;n=4时为第二名;n≤3时只能排名第一。关键是通过设计特定的比赛结果,使WonderTeam积分尽可能低而其他队伍积分尽可能高。该结论已通过严格的数学分析和边界验证,并给出了O(1)时间复杂度的解决方案。
2025-12-05 16:07:48
468
原创 UVa 12093 Protecting Zonk
本文研究了在树形结构村庄中放置两种守卫机器人(士兵和中士)的最小成本问题。通过动态规划方法,定义了四种状态来精确描述节点与父节点间的覆盖关系。状态转移考虑了机器人覆盖范围的不同特性,确保所有道路被保护的同时最小化总成本。算法采用树形DFS遍历,时间复杂度为O(N),适用于大规模输入。样例测试验证了方法的正确性和高效性。
2025-12-05 15:18:45
682
原创 UVa 11979 Hamming Base
题目要求将N个M位的N进制数通过最少步数修改,使得任意两个数在所有位置上数字都不相同。每次操作只能将一个数字加1或减1(不能越界)。关键结论是:对于每个位置,将当前数字排序后与0到N-1顺序配对,总修改步数最小。算法复杂度为O(M*N log N),适用于给定数据范围。最终结果为所有位置修改步数之和。
2025-12-05 13:07:48
590
原创 UVa 10732 The Strange Research
题目要求从给定的N个浮点数中,统计满足表达式(a+b)(1-ab)>0的无序对(a,b)的数量。通过数学分析,将条件转化为两种情况:(1) a+b>0且ab<1;(2) a+b<0且ab>1。针对每种情况,固定a后确定b的范围,利用排序和二分查找高效统计符合条件的b的数量。算法首先对数组排序,然后枚举每个a,通过二分查找快速计算满足条件的b的数量,最终将总数除以2得到答案。该方法时间复杂度为O(N log N),适用于大规模数据。样例输入输出验证了算法的正确性。
2025-12-05 11:28:34
691
原创 UVa 10468 Rigid Circle Packing
本文探讨了阿兹特克国王订购玻璃圆装饰品的运输问题。题目要求将半径相同的圆装入正方形盒子,确保圆不能移动(刚性堆积),并要求盒子尽可能大。输入为圆的半径r,输出装9个圆和10个圆时的盒子边长。通过几何分析发现,最优解可通过固定比例常数计算得出:装9个圆时边长≈7.02251r,装10个圆时≈7.51913r。解题关键在于利用已知最优比例直接计算,而无需复杂推导。参考代码展示了如何实现这一计算。
2025-12-05 08:13:33
539
原创 UVa 10619 Advanced Causal Measurements
本文研究一维宇宙中n个观测事件与m个未知原因事件的因果关系。通过将因果条件转化为区间覆盖问题,提出了一种结合二分查找和贪心算法的高效解决方案。算法首先确定原因事件可能的最晚最早时间T的范围,然后通过二分法寻找最大的可行T,使得所有观测事件都能被m个原因事件覆盖。每次二分检查时,将观测事件转化为位置区间,并采用贪心策略验证m个点能否覆盖所有区间。该算法时间复杂度为O(n log n log R),能有效处理大规模输入。代码实现中注意使用long long类型防止溢出,并合理设置二分上下界。
2025-12-05 08:13:16
799
原创 UVa 708 Dreisam Equations
在Dreisamwaiste星球发现的古老等式中,运算符已褪色,仅保留数字、括号和等号。需判断能否通过插入+、-、*运算符使等式成立。计算规则严格从左到右,括号优先。输入包含多个等式,每个等式左侧为数字,右侧可能含括号和多个数字。输出插入运算符后的等式或"Impossible"。解题需处理无优先级运算、括号嵌套和运算符位置搜索,采用深度优先搜索策略,时间复杂度约为O(3^11)。
2025-12-05 08:12:53
784
原创 UVa 12382 Grid of Lamps
本文研究了给定行列亮度排列下网格灯最少亮灯数问题。通过分析问题本质,发现关键在于将行和列亮度降序排列后,利用Gale-Ryser定理判断可图性,并推导出最小亮灯数的计算公式。算法步骤包括:计算行列亮度总和、排序处理、遍历计算可能的最小值。时间复杂度为O(M×N),能有效处理大规模数据。验证表明该方法正确解决了样例问题,并考虑了各种边界情况。最终代码实现了该算法,确保在合理时间内得出最优解。
2025-12-04 15:37:00
707
原创 UVa 11243 Texas Trip
本题要求覆盖平面上给定整数坐标点的最小正方形面积。关键难点在于正方形可以旋转任意角度。解法核心是通过旋转坐标系将问题转化为函数极值问题:对于每个旋转角度θ,计算将所有点旋转-θ后,覆盖它们所需轴对齐正方形的最小边长s(θ)。由于正方形具有90度旋转对称性,只需在[0, π/2]区间内对s(θ)进行三分搜索找到最小值。每次函数值计算为O(n),三分搜索迭代60次可保证精度。算法时间复杂度为O(60n),对于n≤30高效可行,且满足答案误差不超过0.1的要求。
2025-12-04 14:50:52
739
原创 UVa 12487 Midnight Cowboy
本文研究了树上随机游走问题,提出了一种基于高斯消元法的概率求解方法。针对Nlogonia城市道路系统构成的树形结构,我们建立了线性方程组模型,其中每个节点的概率由其相邻节点决定,边界条件为酒店节点的固定概率(廉价酒店为1,昂贵酒店为0)。通过构建增广矩阵并应用高斯消元算法,可以高效求解从任意起点出发先到达廉价酒店的概率。实验表明,该方法在节点数N≤100时具有较好的时间复杂度(O(N³))和数值稳定性。文章详细阐述了算法实现步骤,包括邻接表构建、矩阵初始化、高斯消元和回代求解等关键环节,为类似随机游走问题提
2025-12-04 12:09:09
572
原创 UVa 12483 Toboggan of Marbles
本文解决弹珠滑梯玩具中弹珠最大直径的计算问题。通过分析弹珠可能被卡住的两种情况:挡板自由端到对侧木杆的水平距离,以及相邻挡板自由端到下一挡板线段的最短距离。算法首先计算每个挡板的水平间隙,然后计算相邻挡板间的过渡距离,取最小值作为弹珠最大直径。采用几何方法精确计算点到线段的距离,确保结果正确。时间复杂度为O(N),适用于大规模输入。最终输出保留两位小数的最大直径值。
2025-12-04 11:54:09
618
原创 UVa 11184 Joyful Ride
本文探讨了环形过山车轨道塔高度的构造问题,要求塔高为1到n+1的互不相同整数,且相邻塔高差的绝对值恰好覆盖1到n。通过数学分析,发现解存在的条件是n≡0或3(mod4)。对于满足条件的n,采用差分法构造序列:跳过特定差值后交替加减差值生成高度。该方法保证高度在合理范围内且满足所有约束,时间复杂度O(n)。提供的参考代码实现了这一构造过程,展示了数学分析与算法设计相结合解决复杂问题的思路。
2025-12-04 10:02:17
528
原创 UVa 10548 Find the Right Changes
本文研究了以两种货物交换支付金额的问题,转化为求解线性丢番图方程的非负整数解。当两种货物单位价值均为正时,通过扩展欧几里得算法计算解的个数;当其中一种为负时,只需判断解的存在性,存在则有无穷多解。算法对每组数据在O(log M)时间内完成,适用于大规模输入。样例测试验证了算法的正确性,能正确处理无解、有限解和无穷解的情况。
2025-12-04 08:21:35
678
原创 UVa 11499 Longest Increasing Sub-sequence
本文研究了一个关于寻找严格递增子矩阵的问题。给定一个N×M的整数矩阵,要求找出一个子矩阵,使其按行优先顺序线性化后形成严格递增序列,并返回最大子矩阵的元素个数。通过分析矩阵的矩形性质和递增条件,提出了一种高效算法:枚举左右边界并结合行滑动窗口技术,动态维护行内递增和行间衔接递增的信息。算法时间复杂度为O(NM²),适用于N,M≤600的规模。代码实现通过预处理和滑动窗口优化,有效减少了计算复杂度,能够在合理时间内解决问题。
2025-12-03 20:30:06
1060
原创 UVa 12357 Ball Stacking
该问题描述了一个金字塔形堆叠的球游戏,参赛者需选择球以获得最大奖品值,但选择时必须遵循依赖关系:拿走一个球必须同时拿走其上方所有支撑球。问题转化为在有向无环图中寻找最大权闭合子图。通过动态规划解决,关键步骤包括: 计算列前缀和g[i][j]表示第j列前i行球值之和; 计算金字塔区域总和w[i][j]作为右下角(i,j)的完整区域值; 定义dp[i][j]为以(i,j)为右下角的最大奖品值,状态转移考虑独立金字塔或与左侧区域结合两种情况; 使用后缀最大值数组sdp优化查找过程,将复杂度从O(N³)
2025-12-03 19:54:42
638
原创 UVa 10953 Stochastic Digit Generator
本文研究了一个随机数字生成器问题,要求计算在特定约束条件下生成的数字除以11后余数为指定值的概率。输入包含多组数据,每组给出数字0-9的生成概率、查询格式字符串和目标余数。解题关键在于利用模11的性质(10^i ≡ (-1)^i mod 11)和动态规划方法,通过状态转移计算概率。算法从右到左处理数字位,维护余数状态的概率分布,最终输出保留8位小数的结果。时间复杂度为O(查询数×位数×11×10),适用于题目给定的数据规模。
2025-12-03 19:10:08
722
原创 UVa 419 Matching Meetings
本文介绍了一个会议安排问题的解决方案,需要为多位教授寻找共同空闲时间段。问题涉及从当前日期开始一年内的工作日安排,将每天9:00-17:00划分为32个15分钟时段。算法采用日期离散化处理和位图标记忙碌时段的方法,通过遍历所有工作日寻找连续空闲时段。解决方案包括日期处理系统、时间离散化、忙碌时段标记和会议查找四个主要步骤,使用map和bitset等数据结构高效处理时间冲突。时间复杂度约为350,000次操作,空间复杂度为O(D+n),能够满足题目要求的约束条件。
2025-12-03 18:35:18
514
原创 UVa 10623 Thinking Backward
本文研究平面分割问题的反向求解:给定最大区域数N,求由椭圆(m)、圆(n)和三角形(p)组成的有效组合。通过推导混合图形的区域数公式F(m,n,p)=2m^2-2m+n^2-n+3p^2-3p+6mp+4mn+6np+2,将问题转化为求解关于n的二次方程。算法通过枚举m和p(范围0-99),计算判别式并验证整数解,确保在O(10^4)时间内高效求解。输出按$m$和$n$升序排列,若无解则输出Impossible.。关键点包括公式验证、算法优化和边界处理。
2025-12-03 15:43:47
690
原创 UVa 11768 Lattice Point or Not
本文研究线段上格点数量的计算问题,针对输入坐标可能含一位小数的特殊情况,提出了一种高效算法。通过将坐标乘以10转换为整数处理,利用最大公约数确定线段上的候选点,并筛选满足坐标能被10整除的格点。该方法避免了浮点精度问题,将问题转化为整数域计算。测试样例验证了算法的正确性,包括端点重合、无格点和多格点等情况。关键点在于坐标转换、参数化表示和条件筛选,保证了算法在较大输入范围内的效率。
2025-12-03 12:04:36
656
原创 UVa 105 The Skyline Problem
本文提出了一种解决天际线问题的扫描线算法。给定一系列按左边界排序的建筑物三元组(Li,Hi,Ri),算法通过初始化高度数组,更新每个x坐标处的最大建筑高度,然后扫描整个区间生成轮廓转折点。时间复杂度为O(n*MAXN),空间复杂度O(MAXN),适用于坐标范围较小的情况。算法直观高效,最后输出由x坐标和高度交替组成的向量序列,以0高度结束。
2025-12-03 11:55:32
356
原创 UVa 104 Arbitrage
本文探讨了套汇问题的动态规划解法。通过将货币兑换建模为有向图,利用动态规划寻找最短利润环。定义状态dp[i][j][k]表示从货币i出发,经k步到j的最大利润,通过三重循环递推更新状态,并在发现利润超过1%时立即终止。算法复杂度为O(n^4),适用于n≤20的情况,能有效判断是否存在套汇机会并输出最短路径。代码实现采用类似Floyd-Warshall的方法,兼顾了效率和正确性。
2025-12-03 11:29:18
982
原创 UVa 1575 Factors
算术基本定理表明,每个大于1的整数可以唯一表示为质数的乘积。定义函数f(k)为整数k的质因子排列数,例如f(10)=2。题目要求对于给定的n,找到最小的k使得f(k)=n。通过分析f(k)的计算公式(多重排列数),将问题转化为寻找满足特定组合数条件的质数指数序列。采用深度优先搜索枚举可能的指数组合,并利用剪枝优化避免溢出。最终通过预处理和映射存储结果,实现高效查询。 关键词:质因数分解、排列数、组合数学、深度优先搜索、剪枝优化
2025-12-03 07:34:02
1026
原创 UVa 10949 Kids in a Grid
题目描述了两个孩子在H×W网格中行走,分别生成字符串SA和SB。要求通过删除最少字符使两字符串相同,等价于求最长公共子序列(LCS)。输入包含网格、起点和移动序列,输出需删除的字符数。关键步骤包括:1) 读取网格并生成路径字符串;2) 使用动态规划(滚动数组优化)或Hunt-Szymanski算法计算LCS;3) 处理空移动序列和坐标转换等边界情况。样例分析展示了从路径字符串"ABCDG"和"ADEB"中删除3和2个字符得到LCS"AB"或&
2025-12-02 21:15:46
724
原创 UVa 10486 Mountain Village
本文研究了在二维网格中寻找满足特定条件的连通区域问题。给定一个r×c的海拔矩阵,需要为每个查询k_i找到包含至少k_i个格子的连通区域,使区域内最高与最低海拔的差值最小。通过枚举高度区间并结合BFS验证的方法,利用高度值范围有限的特点,实现了高效求解。算法时间复杂度约为O(100×7×1600),适用于题目给定的约束条件。关键步骤包括预处理高度值、二分查找最优区间以及基于BFS的连通性检查。
2025-12-02 20:49:01
745
原创 UVa 10317 Equating Equations
本文探讨了一个伪等式重新排列问题,要求在不改变运算符顺序的情况下,通过调整数字顺序使等式成立。关键步骤包括:解析输入等式,将数字移到等式左侧并确定符号;计算总和,检查是否能被均分;使用回溯法搜索满足条件的数字子集;最后重新分配数字并输出结果。算法通过剪枝优化,处理最多16个数字的等式,时间复杂度为组合数级别。代码实现展示了完整的解析和求解过程,适用于类似数学排列问题的解决。
2025-12-02 20:37:26
823
USB 存储设备使用痕迹检测和删除工具(C#)
2014-01-19
.Net 安装程序制作
2015-02-13
自动更新程序示例代码-Visual Basic语言编写
2014-01-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅