- 博客(445)
- 资源 (6)
- 问答 (1)
- 收藏
- 关注
原创 【基础排序】USACO Bronze 2016 January - Angry Cows
摘要:本文探讨了《愤怒的奶牛》游戏的解题方法。游戏目标是通过发射一头奶牛引爆最多干草堆。爆炸会随时间递增半径(t=1时半径1,t=2时半径2等),向左右传播。关键思路是将问题分解为从起点分别计算左右最大引爆范围。采用贪心算法模拟爆炸过程:从起点出发,每轮尽可能向同一方向推进,直到无法继续。由于数据规模小(N≤100),直接枚举每个干草堆作为起点,计算左右扩展范围之和,取最大值即可。时间复杂度为O(n²)。样例输入6个位置,最优解发射到位置5可引爆5个干草堆。
2026-01-06 08:58:27
568
原创 【基础排序】CF - 最优排列Permutator
摘要 本文讨论如何通过重新排列数组b来最小化三重嵌套求和表达式的值。通过数学推导,发现该表达式可简化为各位置$a_k \cdot b_k$的加权和,其中权重$c_k = k \cdot (n - k + 1)$。根据重排不等式原理,将加权后的数组a升序排列,数组b降序排列后点积,即可得到最小值。算法时间复杂度为O(n log n),适用于n≤10^5规模的问题。
2025-11-05 19:28:57
1038
原创 【Sorting & Sets】排序Introduction to Sorting
本文介绍了C++中的常用排序方法。对于静态数组,使用sort(arr, arr+N)进行排序;动态数组则使用sort(v.begin(), v.end())。排序支持子区间操作,如sort(arr+1, arr+4)。对于pair和tuple类型,默认按第一个元素升序排列,第一个元素相同时比较第二个元素。C++标准库的排序函数高效可靠,是优先选择的方法。
2025-10-31 15:15:00
667
原创 CodeForces318A-Even Odds(数学)
Volodya将前n个自然数重新排列:先奇数升序,后偶数升序。给定n和k,求第k位的数字。关键点在于确定奇数的数量((n+1)/2),若k在此范围内,结果为2k-1;否则结果为2*(k-奇数数量)。例如,n=10时序列为{1,3,5,7,9,2,4,6,8,10},第3位是5。该算法直接计算无需存储整个序列,适用于大n(1e12)。
2025-09-28 10:25:32
1021
原创 CodeForces479A-Expression(数学+枚举)
本文介绍了如何通过插入运算符和括号,使三个数字a、b、c组成的算术表达式结果最大。通过枚举所有可能的运算组合(包括加法和乘法)并考虑括号的不同位置,可以找到最大值。具体来说,只需考虑四种情况:a+b+c、abc、(a+b)c、a(b+c)。对于1≤a,b,c≤10的输入范围,这四种情况的比较就足以确定最大结果。文章提供了两种实现方案,第一种枚举6种情况,第二种优化为只需比较4种关键情况即可。
2025-09-25 09:35:40
958
原创 【集合和映射】USACO Bronze 2018 Open - 团队井字棋Team Tic Tac Toe
本文介绍了一种解决多人井字棋胜负判定的算法。题目要求计算棋盘上获胜的单独奶牛和双牛队伍的数量。算法分为两部分:1) 检查每条连线是否被单一字母占据,统计单牛获胜数;2) 检查每条连线是否仅由两种不同字母组成且都出现,统计双牛队伍获胜数。通过暴力枚举所有字母组合和棋盘连线,使用集合去重高效统计结果。代码实现简洁,适用于3×3小规模棋盘。样例输入"COW/XXO/ABC"的正确输出为0和2,验证了算法的有效性。
2025-09-12 16:35:07
1106
原创 【集合和映射】USACO Bronze 2019 December - 我在哪Where Am I?
题目要求找到最小的整数K,使得给定长度为N的字符串中所有长度为K的子串都是唯一的。通过枚举子串长度K,并利用哈希表检查子串是否重复,可以确定满足条件的最小K。例如,样例输入"ABCDABC"在K=4时子串均唯一,因此输出4。该算法时间复杂度为O(N^2),适用于N≤100的范围。
2025-08-23 15:29:21
1066
原创 【集合和映射】CSES - 两个数的和Sum of Two Values
该问题要求在一个数组中找出两个不同位置的数,使其和等于目标值x。朴素解法需要O(n²)时间,但使用哈希映射可以优化到O(n)或O(n log n)。具体做法是遍历数组时,用哈希表存储已访问过的数及其位置。对于每个元素a[i],计算补数x-a[i],若补数存在于哈希表中,则直接返回两个数的位置;否则将当前数存入哈希表。这种方法高效地解决了大数据规模下的查找问题,时间复杂度主要取决于哈希表的实现方式。
2025-08-23 13:32:44
1069
原创 【Sorting & Sets】集合与映射Introduction to Sets & Maps
本文介绍了C++中集合(Set)和映射(Map)的两种实现方式:有序(sorted)和哈希(hash)结构。有序集合/映射基于红黑树实现,操作时间复杂度为O(logN),能保持元素有序;哈希集合/映射基于哈希表实现,理想情况下操作时间复杂度为O(1),但不保证元素顺序。文章详细说明了它们的常用操作(插入、删除、查找等),并提供了代码示例。特别强调了在遍历映射时修改元素的注意事项,包括避免直接删除导致的迭代器失效问题,建议通过创建新映射或延迟删除来解决。
2025-08-23 10:02:00
785
原创 【基础排序】USACO Bronze 2022 December - 奶牛大学Cow College
摘要 Farmer John需要设定奶牛大学的统一学费T,以最大化收入(T×报名奶牛数)。输入N头奶牛的最高支付意愿c_i,将c_i排序后,候选学费即为各c_i。对于每个c_i,计算收入=c_i×(≥c_i的奶牛数),遍历比较得最大收入值及对应的最小学费。例如样例输入[1,6,4,6]排序后,最优解为学费4时收入12(3头奶牛×4)。算法时间复杂度O(N log N)。
2025-08-22 14:45:39
1029
原创 【基础排序】USACO Bronze 2017 February - 奶牛为什么过马路 Why Did the Cow Cross the Road III
随着年龄的增长,Farmer John 变得越来越暴躁和多疑。他逐渐忘记了牛群多样性曾经如何让他的农场繁荣起来,最近甚至决定在农场周围修建一道巨大的围栏,不仅阻止邻近农场的奶牛来访,还彻底禁止了部分农场的奶牛进入。奶牛们对这种情况非常不满,不仅因为它们再也无法与朋友见面,更因为这导致它们不得不取消参加一年一度的 国际挤奶奥林匹克 —— 这是它们全年最期待的活动之一。那些仍然被允许进入 Farmer John 农场的邻居奶牛,发现过程也变得十分繁琐。
2025-08-22 11:36:04
1033
原创 【基础排序】CF - 皮划艇Kayaking
摘要:题目要求将2n个人分配到(n-1)艘双人皮划艇和2艘单人皮划艇中,使双人艇体重差绝对值之和最小。解法是枚举所有可能的两人作为单人艇,将剩余的人排序后相邻配对计算差值,取所有情况中的最小值。时间复杂度为O(n³ log n),适用于n≤50的数据范围。
2025-08-22 09:49:16
1043
原创 【基础排序】CF - 赌场游戏Playing in a Casino
本文介绍了一个计算所有纸牌对局中筹码总数的算法。题目给出n张牌,每张牌有m个数字,玩家两两对局时,筹码数为对应数字差的绝对值之和。直接暴力计算复杂度为O(n²),无法处理大规模数据。通过将每列数字排序,利用前缀和计算每个数字作为较小数的贡献,可以将复杂度优化至O(n log n)。具体步骤包括:对每列数字排序,计算前缀和,然后利用公式累加每个元素的贡献。最终总和为所有列贡献之和。该方法高效且适用于大规模数据,满足题目约束条件。
2025-08-21 17:08:52
1121
原创 【基础排序】CSES - 不重复的数字Distinct Numbers
这篇文章介绍了两种统计序列中不同数字个数的方法。第一种方法先对数组排序,然后遍历比较相邻元素统计不同数字,时间复杂度为O(N log N)。第二种方法利用集合(set)自动去重的特性,插入所有元素后直接返回集合大小,时间复杂度同样为O(N log N)。两种方法都能高效解决问题,示例代码展示了具体实现。对于输入样例[2,3,2,2,3],两种方法都能正确输出结果2。
2025-08-21 09:32:50
367
原创 【递归完全搜索】CCC 2008 - 24点游戏Twenty-four
摘要: 本文介绍了一种解决“24点”纸牌游戏变体问题的算法。给定四张牌,目标是通过加减乘除和括号组合,找到不超过24的最大整数。算法采用全排列枚举牌的顺序(24种),运算符组合(64种)和五种括号运算顺序,确保所有可能的合法表达式被覆盖。关键点包括:1) 检查除法是否整除;2) 避免除零;3) 动态更新最大值。样例输入输出验证了算法的有效性,适用于需要穷举所有可能表达式组合的场景。
2025-08-14 22:48:56
860
原创 [GESP202506 五级] 最大公因数
本文研究了求解多个整数平移后最大公因数的问题。给定n个正整数a₁到aₙ和q次查询,每次查询需要计算a₁+i到aₙ+i的gcd。提出了两种解法:暴力解法直接计算每次查询的gcd,复杂度O(q·n),适用于小规模数据;优化解法则利用gcd的性质,预处理相邻数差值的gcd,将复杂度降为O(n+qlogA)。核心数学原理是gcd(x+a₁,...,x+aₙ)=gcd(x+a₁,a₂-a₁,...,aₙ-a₁),通过预处理差值gcd,每次查询只需计算一次gcd即可得到结果。该优化方法显著提高了效率,适用于大规模数据。
2025-08-08 15:44:46
1200
原创 【递归完全搜索】USACO Bronze 2018 December - 往返搬运Back and Forth
摘要 本文探讨了农夫约翰在两个挤奶棚之间搬运牛奶的问题。初始时,两个棚各有1000加仑牛奶和10个不同容量的水桶。在四天内,约翰每天交替从一个棚取桶装满牛奶运到另一个棚。通过深度优先搜索(DFS)枚举所有可能的桶选择顺序,记录搬运后第一个棚储奶罐的最终牛奶量。使用集合存储结果以自动去重,最终输出可能的不同牛奶量个数。该算法有效处理了状态转移和桶分布变化,时间复杂度在合理范围内。
2025-08-08 13:04:31
949
原创 洛谷P10446 64位整数乘法(64位整数乘法 + 二进制拆分)
本文介绍了一种计算大整数乘法取模的方法,适用于 a, b, p ≤ 10^18 的情况。常规直接相乘会导致溢出,因此采用类似快速幂的二进制分解思路:将 b 拆分为二进制位,通过加法和位运算代替乘法,每次对中间结果取模。该方法时间复杂度为 O(logb),避免了溢出问题,确保在 long long 范围内安全计算 a×b mod p。核心思想是将乘法转化为加法,通过逐位处理实现高效计算。
2025-08-07 20:25:28
1114
原创 洛谷P1226 【模板】快速幂(快速幂算法 + 递归)
本文介绍了快速幂算法,用于高效计算$a^b \mod p$。传统方法时间复杂度为$O(b)$,而快速幂利用二进制分解思想将复杂度降至$O(\log b)$。算法通过不断平方底数并检查指数的二进制位是否为1来优化计算。文章提供了迭代和递归两种实现代码,适用于大数运算场景($0\le a,b<2^{31}$),并给出了模运算的数学原理和具体操作步骤。核心思想是将指数分解为2的幂次和,通过位运算快速求解幂模结果。
2025-08-07 13:00:25
1061
原创 【递归完全搜索】USACO Bronze 2019 December - 奶牛排列Livestock Lineup
摘要:农夫约翰需要为8头奶牛安排挤奶顺序,满足N条相邻约束条件。奶牛名字按字典序排序后,使用next_permutation生成所有排列,检查每个排列是否满足所有约束(即每对约束奶牛必须相邻)。第一个满足条件的排列即为字典序最小的解,直接输出即可。该问题通过暴力枚举能在可行时间内解决。
2025-08-06 10:40:16
800
原创 【递归完全搜索】USACO Bronze 2023 January - 牛栏降温 IIAir Cownditioning II
本文介绍了如何通过暴力枚举空调组合来满足奶牛降温需求的最小成本问题。由于空调数量M≤10,可以枚举所有2^M种组合。对于每种组合,计算每个牛栏的降温量,并验证是否所有奶牛的需求区间都满足降温要求。若满足则记录成本,最终输出最小成本。该方法时间复杂度合理,适用于给定数据规模。
2025-08-05 23:24:11
910
原创 【Complete Search】递归的完全搜索Complete Search with Recursion
摘要 本文介绍了两种完全搜索方法(递归和位掩码)来解决子集生成问题,并以"Apple Division"问题为例展示了具体实现。对于排列生成问题,讨论了字典序排列的概念,并提供了递归和迭代两种生成方法。在"Creating Strings I"问题中,展示了如何生成所有唯一排列的解决方案。关键点包括: 子集生成的两种方法(递归和二进制枚举) 排列的字典序概念 完全搜索在n≤20时的时间可行性 具体问题的代码实现 位运算技巧在子集枚举中的应用 这些方法适用于小规模(n≤
2025-08-05 20:44:57
1367
原创 【基础完全搜索】USACO Bronze 2019 January - 猜动物Guess the Animal
摘要: 题目描述奶牛贝茜和艾尔西玩"猜动物"游戏,艾尔西通过提问动物特征逐步缩小候选集合。要求计算在确定正确答案前可能获得的最大"是"回答次数。关键思路是:答案等于任意一对动物共有特征数的最大值加1。通过枚举所有动物对,统计它们的共有特征数,取最大值后加1即为结果。例如输入4种动物及其特征时,最大共有特征数为2(如cow和goat共有"eatsgrass"和"makesmilk"),因此输出3。算法时间复杂度为O(n²·K²),
2025-08-04 19:09:38
692
原创 【基础完全搜索】USACO Bronze 2017 February - 奶牛为什么要过马路 IIWhy Did the Cow Cross the Road II
奶牛是非常有规律的动物。每头奶牛每天都会以固定的方式穿过这条圆形道路:每头奶牛的进点和出点不同;所有穿越点都互不相同。农夫约翰一共有26头奶牛,名字依次为A~Z(他还没考虑第27头奶牛怎么办)。因此,道路上正好有52个穿越点,每头奶牛占两个点。农夫约翰按顺时针扫描整条道路,把每个穿越点的奶牛名字按顺序记录下来,得到一个长度为52的字符串,其中每个大写字母恰好出现两次。他没有记录哪个是进点,哪个是出点。现在,他想知道有多少对奶牛在进出牧场的路径上会发生交叉。我们定义:如果奶牛a。
2025-08-01 07:00:00
1668
原创 [GESP202506 五级] 奖品兑换
题目要求计算使用两种兑换方式(a课堂券+b作业券或b课堂券+a作业券)时,最多能兑换的奖品数量。 解题思路:采用二分法确定最大兑换份数x,通过check函数验证是否存在x份兑换方案满足券数限制。其中check函数内部再次使用二分法枚举两种兑换方式的组合数量,判断是否满足n和m的券数限制。 关键点:1. 将问题转化为二分答案问题;2. 在check函数中通过二次二分优化枚举过程;3. 预处理数据使n≥m且a≥b以简化判断。 时间复杂度:O(log²N),适用于n,m≤1e9的大数据量。参考代码实现了完整的二分
2025-07-31 13:59:47
1309
1
原创 【基础完全搜索】USACO Bronze 2018 January - 救生员Lifeguards
农夫约翰为奶牛们新建了一个游泳池,他认为这样可以帮助奶牛们放松,提高产奶效率。为了确保安全,他雇佣了N头奶牛作为救生员,每头奶牛的值班时间是某个连续的时间段。为简化问题,假设泳池每天开放时间为t0到t1000,因此每位救生员的值班可以用两个整数表示:开始时间和结束时间(不包括结束时间本身)。例如,一名救生员从t4到t7值班,表示她负责的是时间段47,共 3 个单位时间。不幸的是,农夫约翰雇了 比预算多一头救生奶牛,他必须解雇其中一名。
2025-07-31 05:30:00
627
原创 【基础完全搜索】USACO Bronze 2020 February - 三角形牧场Triangles
题目要求找出由三个围栏桩构成的直角三角形,其中一条边平行于x轴,另一条边平行于y轴,并输出最大面积的两倍值。解题思路是枚举所有可能的三元组,检查是否存在满足条件的点组合:即一个点作为直角顶点,另一个点与其y坐标相同(形成水平边),第三个点与其x坐标相同(形成垂直边)。计算两倍面积(|x差|*|y差|)并更新最大值。该算法时间复杂度为O(N^3),在N≤100时可行。输入样例输出2,对应由点(0,0)、(1,0)、(1,2)构成的三角形面积的两倍。
2025-07-30 14:53:15
1053
原创 【基础完全搜索】USACO Bronze 2019 December - 奶牛体操训练Cow Gymnastics
为了提高健康水平,奶牛们开始进行体操训练了!农夫约翰选定了他最喜爱的奶牛 Bessie 来执教其他N头奶牛,同时评估她们学习不同的体操技术的进度。K次训练课的每一次,Bessie 都会根据N头奶牛的表现给她们进行排名。之后,她对这些排名的一致性产生了好奇。称一对不同的奶牛是一致的,当且仅当其中一头奶牛在每次训练课中表现都比另一头要好。请帮助 Bessie 计算一致的奶牛的对数。
2025-07-30 09:35:34
949
原创 POJ2376-Cleaning Shifts(贪心 + 区间覆盖问题 + 排序)
摘要: 该题要求用最少的奶牛覆盖区间 [1, T],每头奶牛的工作时间为 [s_i, t_i]。采用贪心算法:将奶牛按起点排序后,每次选择能衔接当前覆盖终点且延伸最远的奶牛。若无法覆盖全部区间则输出 -1。关键步骤包括排序、贪心扫描和覆盖判断,时间复杂度为 O(N log N)。 样例解释:输入 3 10,三头奶牛的工作区间分别为 [1,7]、[3,6]、[6,10],最优解是选择第1和第3头奶牛,覆盖全部班次,输出 2。
2025-07-29 06:00:00
1102
原创 【基础完全搜索】USACO Bronze 2022 Open - 谎言的人数Counting Liars
摘要: 农夫约翰的N头奶牛各自提供了Bessie可能的位置信息(≤pi或≥pi),但可能存在奶牛说谎。题目要求计算最少有多少头奶牛在说谎。 核心思路: 将奶牛按pi排序,枚举每个pi作为Bessie的可能位置x。 对于位置x,统计左边说"L"(x≤pi)但pi<x的奶牛数(撒谎),以及右边说"G"(x≥pi)但pi>x的奶牛数(撒谎)。 通过预处理left和right数组快速计算每个位置的撒谎总数,取最小值即为答案。 时间复杂度: O(N log N)(排
2025-07-27 11:24:06
1036
原创 【基础完全搜索】USACO Bronze 2020 December - 雏菊链Daisy Chains
摘要 题目要求计算Bessie拍摄的包含"平均花"的照片数量。"平均花"指照片中存在一朵花,其花瓣数等于该照片所有花的平均花瓣数。算法通过枚举所有可能的照片区间(共O(n²)个),使用前缀和数组快速计算区间平均值(O(1)),再遍历区间检查是否存在符合条件的花(O(n))。总时间复杂度为O(n³),对于n≤100的数据规模完全可行。样例输入4朵花的花瓣数1,1,2,3,输出6张符合条件的照片:4张单花照片,以及(1,2)和(2,4)两个区间。
2025-07-26 13:19:24
1162
原创 牛客NC17508 指纹锁(STL容器 + set)
本文描述了一个指纹锁系统的模拟实现,要求处理三种操作:添加指纹、删除相似指纹和查询是否能开锁。系统需要判断数字指纹是否在允许的差值范围内(k),并据此执行相应操作。采用std::set数据结构,利用其有序性和高效的查找特性,通过lower_bound和upper_bound方法快速定位区间元素。每个操作的时间复杂度为O(log n),整体复杂度为O(m log n),能够处理大规模数据。主要实现策略包括:添加时检查区间是否存在元素,删除时批量移除区间内所有元素,查询时检查区间内是否存在匹配指纹。
2025-07-26 08:23:21
627
原创 牛客NC16660 [NOIP2004]FBI树(递归 + 二叉树后序遍历)
FBI 树是一种二叉树,它的结点类型也包括 F 结点、B 结点和 I 结点三种。由一个长度为2N的 “01” 串S可以构造出一棵 FBI 树TTRSSSS1S2S1RT1S2RT2现在给定一个长度为2N的 “01” 串,请用上述构造方法构造出一棵 FBI 树,并输出它的。:先后序遍历左子树,再后序遍历右子树,最后访问根节点。
2025-07-25 13:59:31
834
原创 POJ3069-Saruman‘s Army(贪心)
摘要: 本文解决了一个关于覆盖士兵位置的最少宝石数量问题。给定士兵位置和宝石的有效范围R,要求计算覆盖所有士兵所需的最少宝石数。采用贪心算法策略:1) 对士兵位置排序;2) 从左到右扫描,每次选择当前未被覆盖的最左士兵;3) 在R范围内最右士兵处放置宝石;4) 跳过该宝石能覆盖的所有士兵;5) 重复直至所有士兵被覆盖。该算法确保每次放置的宝石覆盖范围最大化,从而最小化宝石总数。时间复杂度为O(n log n),适用于R和n均不超过1000的规模。样例输入和输出验证了算法的正确性。
2025-07-24 13:00:14
905
原创 牛客NC16625 [NOIP2009]分数线划定(排序)
本题要求根据笔试成绩划定面试分数线,并输出所有符合条件的选手信息。面试分数线按计划录取人数m的150%计算,取第⌊1.5m⌋名的成绩作为分数线。所有成绩不低于该分数线的选手进入面试。选手需按成绩从高到低排序,成绩相同时按报名号从小到大排序。 解题步骤: 输入选手的报名号和成绩 按成绩降序(成绩相同则按报名号升序)排序 计算面试分数线为第⌊1.5m⌋名的成绩 统计成绩不低于分数线的选手人数 输出分数线、实际入围人数和所有入围选手信息 时间复杂度为O(nlogn),主要来自排序操作。
2025-07-22 22:38:45
844
原创 牛客NC15975 小C的记事本(字符串 + 栈)
小C 最近学习了 Java 小程序开发,为了练习,他打算实现一个简易的记事本程序。:将字符串str追加到记事本末尾(仅包含英文小写字母);delete(k):从记事本末尾删除k个字符(保证此时记事本不为空);print(k):输出当前记事本的第k个字符(保证合法);undo():撤销最近的一次append或delete操作,使记事本回到该操作之前的状态。请你实现这个程序,并完成若干次操作的模拟。
2025-07-22 03:00:00
845
原创 牛客NC15173 The Biggest Water Problem(数位分离 + 递归 + 数根)
对于一个数,把它所有位上的数字进行加和,得到新的数。重复执行若干次,直到结果是个位数为止。输出最终的这个个位数。
2025-07-21 10:29:38
785
原创 牛客NC15163 逆序数(逆序数 + 归并排序)
本文介绍了如何使用归并排序高效计算序列中的逆序对数量。通过分治策略将数组不断二分,在合并两个有序子序列时,若左子序列当前元素大于右子序列元素,则左子序列后续所有元素都构成逆序对,可一次性统计。这种方法将时间复杂度从暴力法的O(n²)优化到O(nlogn),适用于大规模数据。算法实现时递归处理左右子数组,归并过程中统计逆序对数量,最终输出结果。示例代码展示了该算法的具体实现过程。
2025-07-21 09:35:29
1087
原创 牛客NC15128 老子的全排列呢(DFS + 全排列函数)
老李见和尚赢了自己的酒,但是自己还舍不得,所以就耍起了赖皮,对和尚说:“光武不行,再来点文的,你给我说出来1∼8的全排序,我就让你喝,这次绝不耍你。你能帮帮和尚完成这个挑战吗?
2025-07-21 06:15:00
1086
原创 牛客NC15056 竞赛技巧(排序)
题目要求对N条时间记录(时、分、秒格式)进行升序排序。使用结构体存储时间信息,通过自定义排序规则:先比较小时,相同时比较分钟,再相同时比较秒。使用标准库sort函数实现O(nlogn)的排序,最后按序输出。输入数据范围N≤5000,时间单位值均在合法范围内。样例输入输出验证了排序的正确性。
2025-07-20 16:01:18
793
HTML个人博客.zip
2021-06-19
教育机器人创业计划书.zip_小学教育创业计划书范文
2021-01-07
python的人脸识别签到系统
2022-04-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅