USACO的题目断断续续的刷了好几年了,但由于精力被各种事情分散一直没有系统性的整理,也没有再去尝试突破更高难度的算法。想着今年可以突破一下更高难度的算法,就给自己设立一个小目标吧。
如果你也在刷这个题单,或者刚好卡在某道题上,希望这份整理能帮你快速找到参考,少走点弯路~
当然,如果发现哪里有错误或者更好的解法,也欢迎在评论区指出来,一起交流进步!
祝大家刷题顺利,早日AC~ 🎯
Chapter 1 入 门
Section 1.1 介绍
Section 1.2 提交解决方案、任务类型、特殊问题
| 题目来源 |
标题 |
难度 |
星级 |
考察算法 |
一句话思路总结 |
| 洛谷 |
[[P1200 你的飞碟在这儿]] |
入门 |
⭐ |
字符串遍历 + 模运算 |
将两个字符串的字母通过ASCII偏移映射为1-26后连乘,对47取模比较结果,相等输出GO否则STAY,时间复杂度\(O(|s1|+|s2|)\),空间复杂度\(O(1)\) |
| 洛谷 |
[[P1201 贪婪的送礼者]] |
入门 |
⭐ |
结构体模拟 |
用结构体数组记录每人收支,按送礼流程线性查找更新收入支出,利用整数除法取整和取模处理平均分配与余数返还,时间复杂度 \(O(n^2)\),空间复杂度 \(O(n)\) |
| 洛谷 |
[[P1202 黑色星期五]] |
普及- |
⭐⭐ |
日期递推 + 模运算 |
以1900年1月1日为基准逐月累加天数偏移量,模7确定每月13号的星期,闰年判断控制2月天数,统计\(n\)年内各星期出现次数,时间复杂度\(O(12n)\),空间复杂度\(O(1)\) |
| 洛谷 |
[[P1203 坏掉的项链]] |
普及- |
⭐⭐ |
环形枚举 + 双端贪心 |
将环形项链复制一倍枚举所有断开位置,对每个线性串从两端向中间贪心扩展收集同色珠子(白色作为通配符跟随当前段),取最大值,时间复杂度\(O(n^2)\),空间复杂度\(O(n)\) |
Section 1.3 完全搜索
| 题目来源 |
标题 |
难度 |
星级 |
考察算法 |
一句话思路总结 |
| 洛谷 |
[[P1204 挤牛奶]] |
普及- |
⭐⭐ |
区间合并 + 排序 |
将所有挤奶区间按起点排序后贪心合并重叠区间,边合并边更新最长有人挤奶段和最长无人挤奶段,时间复杂度\(O(n \log n)\),空间复杂度\(O(n)\) |
| 洛谷 |
[[P1205 方块转换]] |
普及 |
⭐⭐ |
矩阵变换 + 枚举验证 |
利用坐标映射公式依次验证旋转\(90^\circ\)/\(180^\circ\)/\(270^\circ\)、水平反射、反射后旋转、不变六种变换,第一个匹配的即为最小序号答案,时间复杂度\(O(n^2)\),空间复杂度\(O(n^2)\) |
| 洛谷 |
[[P1206 回文平方数]] |
普及- |
⭐⭐ |
进制转换 + 回文判断 + 模拟 |
枚举 \([1,300]\) 中的每个数,将其平方转换为 \(B\) 进制字符串并判断是否为回文,若是则输出该数及其平方的 \(B\) 进制表示,时间复杂度 \(O(300 \cdot \log_B 90000)\),空间复杂度 \(O(\log_B 90000)\) |
| 洛谷 |
[[P3864 命名那个数字]] |
普及 |
⭐⭐ |
DFS 枚举 + 哈希查询 |
用DFS按位枚举每个数字对应的3个字母生成所有组合,通过map在\(O(1)\)时间内查询是否在字典中,按字典序输出所有有效名字,时间复杂度\(O(3^n)\),空间复杂度\(O(4617)\) |
| 洛谷 |
[[P1207 双重回文数]] |
普及- |
⭐⭐ |
进制转换 + 回文判断 + 枚举模拟 |
从 \(s+1\) 开始逐个枚举整数,统计其在 \(2 \sim 10\) 进制中为回文的进制种数,当达到 2 种时输出,直到收集 \(n\) 个数为止,时间复杂度 \(O(n \cdot 9 \cdot \log(\text{max\_value}))\),空间复杂度 \(O(\log(\text{max\_value}))\) |
Section 1.4 贪心、制定解决方案
| 题目来源 |
标题 |
难度 |
星级 |
考察算法 |
一句话思路总结 |
| 洛谷 |
[[P1208 混合牛奶]] |
普及- |
⭐ |
贪心 + 排序 |
将奶农按单价升序排序后依次购买直至满足需求量,优先消耗低价资源使总成本最小,时间复杂度\(O(m \log m)\),空间复杂度\(O(m)\) |
| 洛谷 |
[[P1209 修理牛棚]] |
普及 |
⭐⭐ |
贪心 + 排序 |
将牛棚排序后计算相邻牛之间的空隙,用一块木板全覆盖所有牛再减去最大的\(m-1\)个空隙长度得到最小总长度,时间复杂度\(O(c \log c)\),空间复杂度\(O(c)\) |
| 洛谷 |
[[P1211 牛式]] |
普及- |
⭐⭐ |
枚举 + 数位验证 |
用桶数组标记可用数字后枚举所有三位数乘两位数,验证被乘数、乘数、两个部分积和最终积的每位数字是否均在数集中且位数符合竖式要求,时间复杂度\(O(10^5)\),空间复杂度\(O(1)\) |
| 洛谷 |
[[P2693 号码锁]] |
普及- |
⭐ |
暴力枚举 + 环形距离 |
三重循环枚举所有号码组合,利用模运算计算环形双向距离判断是否与两个合法组合的对应位置均在2以内,时间复杂度\(O(n^3)\),空间复杂度\(O(1)\) |
| 洛谷 |
[[P1444 虫洞]] |
普及 |
⭐⭐⭐ |
DFS 枚举配对 + 环检测 |
预处理同y坐标右侧最近虫洞作为向x正方向走的入洞目标,DFS枚举所有完美匹配后从每个虫洞出发模拟行走检测是否成环,统计存在循环的配对方案数,时间复杂度\(O((n-1)!! \cdot n^2)\),空间复杂度\(O(n)\) |
| 洛谷 |
[[P3650 滑雪课程设计]] |
普及- |
⭐⭐ |
枚举区间 + 贪心投影 |
排序后枚举区间下界\(L \in [0, 83]\),将每座山高度投影到\([L, L+17]\)区间计算调整成本平方和,取最小值,时间复杂度\(O(n)\),空间复杂度\(O(n)\) |
Section 1.5 更多搜索技巧
| 题目来源 |
标题 |
难度 |
星级 |
考察算法 |
一句话思路总结 |
| 洛谷 |
[[P1214 等差数列]] |
普及- |
⭐⭐⭐ |
筛法 + 枚举验证 |
用布尔数组筛法标记所有\(p^2+q^2\)为双平方数,提取有序集合后枚举公差\(b\)和首项\(a\),验证连续\(n\)项是否均为双平方数,按\(b\)、\(a\)升序输出,时间复杂度\(O(m^2 + |S| \cdot \text{max\_num} \cdot n)\),空间复杂度\(O(m^2)\) |
| 洛谷 |
[[P1215 母亲的牛奶]] |
普及 |
⭐⭐⭐ |
DFS 状态空间搜索 |
用三维访问标记数组记录已访问状态,从\((0,0,C)\)出发DFS模拟六种倒牛奶操作,收集所有\(A=0\)时\(C\)桶的可达剩余量并升序输出,时间复杂度\(O(A \cdot B \cdot C)\),空间复杂度\(O(A \cdot B \cdot C)\) |
Section 1.6 二进制数
| 题目来源 |
标题 |
难度 |
星级 |
考察算法 |
一句话思路总结 |
| 洛谷 |
[[P1216 数字三角形]] |
普及- |
⭐⭐ |
动态规划(自底向上 / 记忆化搜索) |
自底向上递推每个位置为当前值加上左下和右下较大值,或从顶部DFS记忆化搜索到底部的最大路径和,时间复杂度\(O(r^2)\),空间复杂度\(O(r^2)\) |
| 洛谷 |
[[P1217 回文质数]] |
普及- |
⭐⭐ |
回文判定 + 质数试除 + 数学剪枝 |
利用偶数位回文数必被11整除的性质将上限截断到\(10^7\),枚举奇数并依次判断回文和质数,时间复杂度\(O((b-a) \cdot \sqrt{b} \cdot \log b)\),空间复杂度\(O(1)\) |
| 洛谷 |
[[P1218 特殊的质数肋骨]] |
普及- |
⭐⭐ |
DFS 逐位构造 + 质数剪枝 |
从最高位开始DFS逐位添加1-9,每次构造新数后用试除法判断质数,非质数直接剪枝,达到长度\(n\)时输出,时间复杂度\(O(9^n \cdot \sqrt{10^n})\)(实际因剪枝极小),空间复杂度\(O(n)\) |
Chapter 2 更大的挑战
Section 2.1 图论、Flood Fill算法