- 博客(426)
- 资源 (6)
- 问答 (1)
- 收藏
- 关注
原创 【递归完全搜索】USACO Bronze 2019 December - 奶牛排列Livestock Lineup
摘要:农夫约翰需要为8头奶牛安排挤奶顺序,满足N条相邻约束条件。奶牛名字按字典序排序后,使用next_permutation生成所有排列,检查每个排列是否满足所有约束(即每对约束奶牛必须相邻)。第一个满足条件的排列即为字典序最小的解,直接输出即可。该问题通过暴力枚举能在可行时间内解决。
2025-08-06 10:40:16
460
原创 【递归完全搜索】USACO Bronze 2023 January - 牛栏降温 IIAir Cownditioning II
本文介绍了如何通过暴力枚举空调组合来满足奶牛降温需求的最小成本问题。由于空调数量M≤10,可以枚举所有2^M种组合。对于每种组合,计算每个牛栏的降温量,并验证是否所有奶牛的需求区间都满足降温要求。若满足则记录成本,最终输出最小成本。该方法时间复杂度合理,适用于给定数据规模。
2025-08-05 23:24:11
585
原创 【Complete Search】递归的完全搜索Complete Search with Recursion
摘要 本文介绍了两种完全搜索方法(递归和位掩码)来解决子集生成问题,并以"Apple Division"问题为例展示了具体实现。对于排列生成问题,讨论了字典序排列的概念,并提供了递归和迭代两种生成方法。在"Creating Strings I"问题中,展示了如何生成所有唯一排列的解决方案。关键点包括: 子集生成的两种方法(递归和二进制枚举) 排列的字典序概念 完全搜索在n≤20时的时间可行性 具体问题的代码实现 位运算技巧在子集枚举中的应用 这些方法适用于小规模(n≤
2025-08-05 20:44:57
572
原创 【基础完全搜索】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
594
原创 【基础完全搜索】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
1610
原创 [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
1113
1
原创 【基础完全搜索】USACO Bronze 2018 January - 救生员Lifeguards
农夫约翰为奶牛们新建了一个游泳池,他认为这样可以帮助奶牛们放松,提高产奶效率。为了确保安全,他雇佣了N头奶牛作为救生员,每头奶牛的值班时间是某个连续的时间段。为简化问题,假设泳池每天开放时间为t0到t1000,因此每位救生员的值班可以用两个整数表示:开始时间和结束时间(不包括结束时间本身)。例如,一名救生员从t4到t7值班,表示她负责的是时间段47,共 3 个单位时间。不幸的是,农夫约翰雇了 比预算多一头救生奶牛,他必须解雇其中一名。
2025-07-31 05:30:00
581
原创 【基础完全搜索】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
992
原创 【基础完全搜索】USACO Bronze 2019 December - 奶牛体操训练Cow Gymnastics
为了提高健康水平,奶牛们开始进行体操训练了!农夫约翰选定了他最喜爱的奶牛 Bessie 来执教其他N头奶牛,同时评估她们学习不同的体操技术的进度。K次训练课的每一次,Bessie 都会根据N头奶牛的表现给她们进行排名。之后,她对这些排名的一致性产生了好奇。称一对不同的奶牛是一致的,当且仅当其中一头奶牛在每次训练课中表现都比另一头要好。请帮助 Bessie 计算一致的奶牛的对数。
2025-07-30 09:35:34
857
原创 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
952
原创 【基础完全搜索】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
994
原创 【基础完全搜索】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
1104
原创 牛客NC17508 指纹锁(STL容器 + set)
本文描述了一个指纹锁系统的模拟实现,要求处理三种操作:添加指纹、删除相似指纹和查询是否能开锁。系统需要判断数字指纹是否在允许的差值范围内(k),并据此执行相应操作。采用std::set数据结构,利用其有序性和高效的查找特性,通过lower_bound和upper_bound方法快速定位区间元素。每个操作的时间复杂度为O(log n),整体复杂度为O(m log n),能够处理大规模数据。主要实现策略包括:添加时检查区间是否存在元素,删除时批量移除区间内所有元素,查询时检查区间内是否存在匹配指纹。
2025-07-26 08:23:21
554
原创 牛客NC16660 [NOIP2004]FBI树(递归 + 二叉树后序遍历)
FBI 树是一种二叉树,它的结点类型也包括 F 结点、B 结点和 I 结点三种。由一个长度为2N的 “01” 串S可以构造出一棵 FBI 树TTRSSSS1S2S1RT1S2RT2现在给定一个长度为2N的 “01” 串,请用上述构造方法构造出一棵 FBI 树,并输出它的。:先后序遍历左子树,再后序遍历右子树,最后访问根节点。
2025-07-25 13:59:31
743
原创 POJ3069-Saruman‘s Army(贪心)
摘要: 本文解决了一个关于覆盖士兵位置的最少宝石数量问题。给定士兵位置和宝石的有效范围R,要求计算覆盖所有士兵所需的最少宝石数。采用贪心算法策略:1) 对士兵位置排序;2) 从左到右扫描,每次选择当前未被覆盖的最左士兵;3) 在R范围内最右士兵处放置宝石;4) 跳过该宝石能覆盖的所有士兵;5) 重复直至所有士兵被覆盖。该算法确保每次放置的宝石覆盖范围最大化,从而最小化宝石总数。时间复杂度为O(n log n),适用于R和n均不超过1000的规模。样例输入和输出验证了算法的正确性。
2025-07-24 13:00:14
756
原创 牛客NC16625 [NOIP2009]分数线划定(排序)
本题要求根据笔试成绩划定面试分数线,并输出所有符合条件的选手信息。面试分数线按计划录取人数m的150%计算,取第⌊1.5m⌋名的成绩作为分数线。所有成绩不低于该分数线的选手进入面试。选手需按成绩从高到低排序,成绩相同时按报名号从小到大排序。 解题步骤: 输入选手的报名号和成绩 按成绩降序(成绩相同则按报名号升序)排序 计算面试分数线为第⌊1.5m⌋名的成绩 统计成绩不低于分数线的选手人数 输出分数线、实际入围人数和所有入围选手信息 时间复杂度为O(nlogn),主要来自排序操作。
2025-07-22 22:38:45
787
原创 牛客NC15975 小C的记事本(字符串 + 栈)
小C 最近学习了 Java 小程序开发,为了练习,他打算实现一个简易的记事本程序。:将字符串str追加到记事本末尾(仅包含英文小写字母);delete(k):从记事本末尾删除k个字符(保证此时记事本不为空);print(k):输出当前记事本的第k个字符(保证合法);undo():撤销最近的一次append或delete操作,使记事本回到该操作之前的状态。请你实现这个程序,并完成若干次操作的模拟。
2025-07-22 03:00:00
815
原创 牛客NC15173 The Biggest Water Problem(数位分离 + 递归 + 数根)
对于一个数,把它所有位上的数字进行加和,得到新的数。重复执行若干次,直到结果是个位数为止。输出最终的这个个位数。
2025-07-21 10:29:38
738
原创 牛客NC15163 逆序数(逆序数 + 归并排序)
本文介绍了如何使用归并排序高效计算序列中的逆序对数量。通过分治策略将数组不断二分,在合并两个有序子序列时,若左子序列当前元素大于右子序列元素,则左子序列后续所有元素都构成逆序对,可一次性统计。这种方法将时间复杂度从暴力法的O(n²)优化到O(nlogn),适用于大规模数据。算法实现时递归处理左右子数组,归并过程中统计逆序对数量,最终输出结果。示例代码展示了该算法的具体实现过程。
2025-07-21 09:35:29
1017
原创 牛客NC15128 老子的全排列呢(DFS + 全排列函数)
老李见和尚赢了自己的酒,但是自己还舍不得,所以就耍起了赖皮,对和尚说:“光武不行,再来点文的,你给我说出来1∼8的全排序,我就让你喝,这次绝不耍你。你能帮帮和尚完成这个挑战吗?
2025-07-21 06:15:00
979
原创 牛客NC15056 竞赛技巧(排序)
题目要求对N条时间记录(时、分、秒格式)进行升序排序。使用结构体存储时间信息,通过自定义排序规则:先比较小时,相同时比较分钟,再相同时比较秒。使用标准库sort函数实现O(nlogn)的排序,最后按序输出。输入数据范围N≤5000,时间单位值均在合法范围内。样例输入输出验证了排序的正确性。
2025-07-20 16:01:18
736
原创 牛客NC14893 栈和排序(贪心 + 栈 + 后缀最大值维护)
摘要: 题目要求在给定排列顺序入栈的前提下,通过合法出栈操作构造字典序最大的输出序列。核心思路是贪心策略:尽量让大的数尽早出栈。两种解法: 直接贪心:维护当前未输出的最大值id,若栈顶等于id则立即输出,否则入栈;最后将栈中剩余元素倒序输出。 后缀最大值优化:预处理后缀最大值数组sufmax[i],当栈顶元素大于后面所有未入栈元素时出栈,确保每次输出当前可操作的最大值。两种方法均满足时间复杂度要求,适用于大规模数据($n \leq 10^6$)。 关键词:栈操作、字典序、贪心算法、后缀最大值。
2025-07-20 14:55:00
781
原创 牛客NC14661 简单的数据结构(deque双端队列)
栗酱有一天在网上冲浪的时候发现了一道很有意思的数据结构题。1a:从前面插入一个元素a2:从前面删除一个元素3a:从后面插入一个元素a4:从后面删除一个元素5:将整个容器头尾翻转6:输出当前容器中元素的个数和所有元素7:将所有元素从小到大排序请你模拟这个数据结构的所有操作。
2025-07-20 09:22:29
652
原创 P3864 [USACO1.2] 命名那个数字 Name That Number
本文介绍了一个将数字编号转换为牛名字的程序。根据手机键盘字母映射规则,数字2对应A/B/C,3对应D/E/F,以此类推。程序首先读取输入的数字编号和4617个预定义的合法名字字典。对于每个字典中的名字,程序将其转换为对应的数字字符串,若与输入编号匹配则输出该名字。若没有匹配项则输出"NONE"。算法时间复杂度约为O(n*L),其中n是字典大小,L是名字长度。通过线性扫描字典并逐个转换比较,高效解决了数字编号到有效名字的转换问题。
2025-07-20 06:00:00
1064
原创 牛客NC14585 大吉大利,今晚吃鸡(汉诺塔变形 + 数学公式推导)
摘要: 本题是汉诺塔问题的变种,限定圆盘只能在相邻柱子间移动。通过递推分析,将n个盘子的移动分解为多次子问题求解,得出递推式F(n)=3F(n-1)+2。经数学变换后得到通项公式F(n)=3ⁿ-1,直接计算即可获得最小步数。输入n(0≤n<26),输出结果为3ⁿ-1。
2025-07-19 18:21:34
1281
原创 牛客NC14266 Laptop(排序 + 逆序扫描 + 记录最大值)
摘要 题目要求统计被其他笔记本"完虐"(即内存和速度均严格小于)的笔记本数量。通过将笔记本按内存升序排序,并逆序扫描维护当前最大速度值,可以高效判断每台笔记本是否被完虐。算法时间复杂度为O(n log n),适用于大规模数据。关键步骤包括排序、逆序遍历和最大值维护,有效将二维比较问题转化为线性扫描问题。
2025-07-19 14:18:46
725
原创 P1205 [USACO1.2] 方块转换 Transformations
题目P1205要求判断一个n×n黑白图案通过何种最小序号转换方式变成目标图案。提供了7种转换方式:90°、180°、270°顺时针旋转,水平反射,组合变换(反射+旋转),不改变,以及无效转换。程序需要依次检查每种变换是否匹配目标图案,优先选择序号小的有效变换。使用二维数组存储原始和目标图案,通过比较变换后的图案与目标图案来判定转换类型。核心是实现了四种基本变换和组合变换的判断函数,最终输出匹配的最小序号转换方式或7(无效转换)。
2025-07-18 20:04:41
834
原创 【基础完全搜索】USACO Bronze 2017 US Open - 牛基因组学Bovine Genomics
题目要求统计基因序列中能区分斑点奶牛和普通奶牛的位置数量。具体方法是:对于每个位置,检查斑点牛和普通牛在该位置出现的字符是否完全不同。如果两者的字符集合无交集,则该位置有效。算法复杂度为 O(M*N),其中 N 是奶牛数量,M 是基因序列长度。通过逐个位置比较字符出现情况,最终输出满足条件的位置总数。样例输入中,只有第2列(下标1)满足条件,故输出1。
2025-07-17 18:31:13
673
原创 【基础完全搜索】USACO Bronze 2016 Open - 钻石收集者Diamond Collector
本文介绍了如何解决一个关于挑选钻石的问题:在N颗钻石中选择尽可能多的钻石,使得任意两颗钻石的大小差不超过K。方法是对钻石排序后,枚举每个起点,向右扩展找到满足条件的最大区间。算法时间复杂度为O(NlogN + N^2),适用于给定数据范围。通过排序和双重循环,可以高效找到最优解。
2025-07-17 11:36:40
383
原创 【基础完全搜索】USACO Bronze 2016 February - 倒奶问题Milk Pails
不幸的是,他那台高端的挤奶机刚刚坏掉了,现在他手头上只有三个容量为整数的奶桶,分别为。虽然他可能无法恰好倒满大桶,但他希望你帮他计算:他最多可以往容量为。输出一个整数,表示农夫约翰最多可以倒入大桶的牛奶量(不得超过。农夫约翰可以将:容量为 17 的桶倒入 3 次,共。,表示两个小桶的容量以及目标大桶的容量。、容量为 25 的桶倒入 1 次,共。,未超过 77,且为可能倒入的最大值。的小桶装满,然后倒入容量为。的中桶装满,然后倒入容量为。的大桶(前提是不溢出)。的大桶(前提是不溢出)。的限制下是完全可行的。
2025-07-17 05:00:00
737
原创 【Complete Search】基础完全搜索Basic Complete Search
资料-resources在很多问题中(尤其是在 USACO Bronze 级别),只需检查解空间中的所有可能情况就足够了,比如所有元素、所有元素对、所有子集,或者所有排列。毫不奇怪,这种方法被称为完全搜索(complete search)或暴力搜索(brute force),因为它会彻底遍历整个解空间。
2025-07-13 23:26:31
856
原创 P1204 [USACO1.2] 挤牛奶Milking Cows
该题目要求计算农民挤奶时间段中最长的连续有人挤奶时间和最长无人挤奶时间。解题思路是对所有时间段按开始时间排序,然后合并重叠或连续的时间段。在合并过程中,维护当前合并段的起始和结束时间,当遇到不相交的区间时,更新最长有人挤奶时间和最长无人时间。最后输出这两个最大值。时间复杂度为O(n log n),主要来自排序步骤。关键点在于正确合并区间并准确计算相邻区间之间的空隙。
2025-07-11 19:30:00
780
原创 TEXT Complete Search
文章摘要: 穷举搜索(暴力法)在算法竞赛中是一种简单有效的解题策略,适用于可能情况不超过百万级的题目。关键在于评估时间复杂度:通过大O记法估算操作次数,判断程序能否在限定时间内完成。对于嵌套循环,将各层循环次数相乘得出总复杂度;递归需注意栈空间限制。实际应用中,需观察问题特性以简化搜索空间(如按钮顺序无关、重复操作无效等)。示例题目展示了如何通过优化观察将不可行的暴力搜索转化为可行方案(如Party Lamps降至16种组合)。暴力法的优势在于实现简单,为复杂问题节省开发时间,但需谨慎评估问题规模与优化可能
2025-07-05 16:48:38
934
原创 P1203 [USACO1.1] 坏掉的项链 Broken Necklace
摘要:题目要求在一串环形排列的珠子项链(由红、蓝、白珠组成)中找到一个最佳断点,使得从断点两端收集同色珠子的数量最大化(白色可视为任意颜色)。解法是将字符串翻倍模拟环形结构,枚举每个可能的断点,分别向左/右收集珠子,直到遇到不同颜色,记录最大值。注意总和不超过珠子总数n。时间复杂度为O(n²),适用于n≤350的数据规模。
2025-07-05 15:00:00
905
原创 P1202 [USACO1.1] 黑色星期五Friday the Thirteenth
题目要求计算给定年份范围内每个月的13号落在星期一到星期日的次数。已知1900年1月1日是星期一,需考虑闰年规则和月份天数差异。通过模拟逐月推进,计算每个月的13号是星期几,并用数组统计各星期出现的次数。最终按照周六、日、一到五的顺序输出结果。核心思路是遍历年份和月份,利用取模运算确定13号的星期几,并更新下个月1号的起始星期。该方法高效且准确,适用于最多400年的数据规模。
2025-07-04 23:26:54
1225
原创 P1201 [USACO1.1] 贪婪的送礼者 Greedy Gift Givers
这是一道模拟题,要求计算一群朋友之间送礼的收支差额。每个人准备一定金额送礼,将钱平均分给接收者(余数保留),最终需要统计每人收到的钱比送出的钱多多少。 解题思路: 记录输入顺序用于输出 使用两个映射表分别记录每人收到的钱和送出的钱 处理每个送礼者的信息:计算平分金额并更新接收者的收入,同时记录送礼者实际送出的金额(扣除余数) 按照输入顺序输出每个人的收支差额(收到的钱 - 送出的钱) 关键点: 送礼金额为整数,采用向下取整平分 当送礼金额或接收人数为0时跳过处理 保持输入顺序输出结果 时间复杂度O(n),空
2025-07-04 09:50:14
716
原创 P1200 [USACO1.1] 你的飞碟在这儿 Your Ride Is Here
题目要求根据彗星名和小组名判断是否匹配。将两个名字转换为字母乘积(A=1至Z=26),并对47取模。若模值相同则输出"GO",否则输出"STAY"。输入为两个不超过6个字母的大写字符串。例如,COMETQ和HVNGAT的模值相同,输出GO;ABSTAR和USACO不同,输出STAY。解题只需简单计算字母乘积并比较模值即可。
2025-07-03 04:30:00
663
原创 TEXT Ad Hoc Problems
摘要:Ad hoc题指无法归类的特殊算法问题,每道题都需要独特的解法。这类题目通常需要创新思维、特殊数据结构或巧妙的条件组合,解法往往依赖对题意的精准解读和操作排序。虽然解法特殊,但仍需适当优化。这类题目在竞赛中最为常见,当无法归类时应考虑是否为ad hoc题,需做好应对独特挑战的准备。(149字)
2025-07-03 03:30:00
190
原创 TEXT Contest Problem Types
1999年的一项研究发现,编程竞赛题目可归纳为16种核心类型,其中前几类覆盖了80%的IOI赛题。主要类型包括动态规划、贪心算法、最短路径等经典题型。研究表明:掌握40%的题型有望获得IOI银牌,掌握80%则能冲击金牌。最具挑战性的是需要算法嵌套的组合问题。通过针对性训练这些核心题型,参赛者能有效提升竞赛水平。
2025-07-03 02:30:00
247
原创 TEXT Submitting Solutions
USACO训练平台使用自动评分系统,支持C/C++、Pascal、Python和Java等语言。提交程序需包含ID、题目名和语言信息的头部注释。首个"test"挑战要求从输入文件读取两个整数并输出它们的和。系统有严格的运行限制(1秒时间、16MB内存等),要求程序正常退出并正确格式化输出。平台遵循IOI竞赛标准,禁止作弊或访问外部文件。示例提供了C和C++的解法代码,强调文件操作和基本格式要求。用户需严格遵守规则,享受编程竞赛的乐趣。
2025-07-02 22:10:04
396
HTML个人博客.zip
2021-06-19
教育机器人创业计划书.zip_小学教育创业计划书范文
2021-01-07
python的人脸识别签到系统
2022-04-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人