![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
USACO专题
Fau QAQ
逍遥Fau
为伊蕾娜献上心脏!
展开
-
USACO专题 (持续更新ing)
Chapter11.1原本这里是USACO的介绍, 本文就换成博主对本博客的介绍啦!本博文会持续更新USACO的做题题解, 包括题目考查, 解题思路, 题目细节 以及 AC代码.介于博主也是个菜鸡, 所以如果您对本文内容有任何疑问, 欢迎在博文下方评论.最后, 如果感觉到本文帮助到了您, 也请您为博主点个赞????, 让本文帮助到更多的人.注: 本文所有代码均在AcWing评测AC. 1.21.2.1 你的旅途由此开始1.2.2 贪婪的送礼者1.2.3 十三号星期五1.2.4 断开的原创 2021-07-08 23:12:07 · 141 阅读 · 0 评论 -
USACO 1.6.3 优质牛肋骨
1.6.3 优质牛肋骨题目考查枚举 dfs 剪枝考虑到当n==8n == 8n==8的时候, 会有10910^9109个数字, 这显然是无法接受的, 于是考虑优化.我们考虑超级质数的特征: 开头的数字一定是质数. 因此开头的数字只有{2,3,5,7}\{2, 3, 5, 7\}{2,3,5,7}. 接下来考虑剩余数位: 2的倍数一定不行, 5的倍数也一定不行, 因此只剩下{1,3,7,9}\{1, 3, 7, 9\}{1,3,7,9}.此时的最坏情况, 会产生484^848个数字, 再加上素数的判原创 2021-10-14 20:38:32 · 96 阅读 · 0 评论 -
USACO 1.6.2 回文质数
1.6.2 回文质数题目考查质数 回文 11的倍数的特征首先我们考虑回文质数, 一定是个质数, 如果这个质数又是回文数字, 则为回文质数.但是我们没法判断[1,108][1, 10^8][1,108]内的所有质数, 欧拉筛大概也只能筛出10710^7107的质数. 因此考虑优化.我们发现, 除111111以外, 不会再有偶数长度的回文质数了.因为11的倍数的特点是: 某个数字的奇数位置的和, 与偶数位置的和 的差值, 可以被11整除.因此除11以外, 偶数长度的回文质数一定都是11的倍数.原创 2021-10-14 20:29:08 · 139 阅读 · 0 评论 -
USACO 1.6.1 数字三角形
1.6.1 数字三角形题目考查递推我们考虑当选择路径的时候, 如果我们从上往下看, 最终的路径数会有nnn种, 分别以a[n][1]a[n][1]a[n][1]~a[n][n]a[n][n]a[n][n]作为路径的终点.但是如果我们从下往上去看, 最终路径只会有111种, 即a[1][1]a[1][1]a[1][1].那么如果我们以这种思路去思考, 对于a[i][j]a[i][j]a[i][j], 相当于我可以从a[i+1][j]a[i + 1][j]a[i+1][j]和a[i+1][j+1]a[原创 2021-10-14 19:58:38 · 258 阅读 · 0 评论 -
USACO 1.5.2 母亲的牛奶
1.5.2 母亲的牛奶题目考查暴力枚举我们考虑到最多只会有20320^3203种情况, 因此直接暴力所有情况即可.假设当前三个桶内分别有a,b,ca, b, ca,b,c升牛奶, 桶的上限分别是A,B,CA, B, CA,B,C.我们可以分别枚举A桶分给B桶, 分给C桶, … 共六种情况. 然后判断这一情况是否出现过. 若出现过, 则直接忽略这一情况, 否则将该情况加入后续计算.题目细节判断某种情况是否出现过, 我们可以通过setsetset容器来判断, 里面也可以只保存两个桶的牛奶量, 因原创 2021-10-14 19:24:35 · 158 阅读 · 0 评论 -
USACO 1.5.1 等差数列
1.5.1 等差数列题目考查暴力枚举我们考虑预先处理出所有的双平方数.然后我们枚举首项, 枚举公差. 最后判断这些项是否都为双平方数即可.题目细节无AC代码#include <bits/stdc++.h>#define rep(i, n) for (int i = 1; i <= (n); ++i)using namespace std;typedef long long ll;const int N = 250 * 250 * 2 + 10;bool vis[N原创 2021-10-14 19:15:49 · 116 阅读 · 0 评论 -
USACO 1.4.6 滑雪场设计
1.4.6 滑雪场设计题目考查暴力枚举 三分解题思路我们考虑山的高度范围为[0,100][0, 100][0,100], 因此, 我们一定能找到一个l∈[0,83],r=l+17l \in [0, 83], r = l + 17l∈[0,83],r=l+17, 使得所有山峰高度位于[l,r][l, r][l,r]区间时, 花费最小.因此思路1: 我们可以暴力枚举所有左端点, 然后所有花费取最小值即可考虑优化思路1, 因为通常题目的值域范围不会那么小, 如果值域变为[0,109][0, 10^9]原创 2021-09-29 15:59:47 · 113 阅读 · 0 评论 -
USACO 1.4.4 密码锁
1.4.4 密码锁题目考查暴力 容斥原理 环形距离解题思路首先我们比较容易的想出一个O(n3)O(n^3)O(n3)的暴力方式, 枚举每一种情况, 分别判断是否合法即可. 对于通过本题是足够的.但对于这题, 我们有一种更好的O(1)O(1)O(1)方式求解.用容斥原理, 我们可以先计算出对于每一组密码合法的总情况数量, 然后再减去二者同时合法的情况.其中某组密码合法的情况 = min(5, n) * min(5, n) * min(5, n).假设n≥5n \ge 5n≥5, 考虑到对于两原创 2021-09-01 19:14:05 · 163 阅读 · 0 评论 -
USACO 1.4.3 密码运算
1.4.3 密码运算题目考查模拟 枚举解题思路模拟题, 特点是通常题意不是很难, 但是代码实现并不是很容易. (但这个题还好, 代码不长)很显然, 我们需要模拟乘法算式, 要求在运算过程中出现的所有数字均给出, 且长度符合题意.我们假设进行相乘的数字为a和b, a的长度为3, b的长度为2, 所以a ∈[100, 999], b ∈[10, 99]. 不妨枚举所有可能的a和b取值, 然后判断a*b是否合法即可.题目细节注意题目中一共有5处需要检查数字是否都给出.我们可以通过之前学习的to原创 2021-07-20 22:58:30 · 115 阅读 · 0 评论 -
USACO 1.4.2 修理牛棚
1.4.2 修理牛棚题目考查贪心算法, 思维考察解题思路本题相较上题而言, 思维难度很明显提升了. 这里给出两种供参考的解法解法一: 扩增法首先如果木板的数量大于牛的总数, 答案直接就是牛的总数了.否则, 我们一定会有一些木板覆盖空牛棚, 我们想让木板总长度最小, 就相当于覆盖尽可能少的空牛棚.假设牛棚编号从左到右依次为1~S, 我们把所有牛所在位置按编号从小到大排序, 记录在**a[]**中.很显然, 覆盖[1, a[1])区间的空牛棚没有意义, (a[c], S]区间同理.我们可以这原创 2021-07-20 22:57:59 · 205 阅读 · 0 评论 -
USACO 1.4.1 搭配牛奶
1.4.1 搭配购买题目考查贪心算法解题思路本题算是贪心算法的入门题目了, 很显然我们希望买尽可能便宜的牛奶, 因此我们按照牛奶的价格进行从小到大排序, 然后模拟购买过程即可.题目细节本题最大答案卡在了2E9, 并没有溢出int, 但通常这类题目是需要开long long的, 大家很容易忽视掉这一点. 当答案需要用long long时, 需要注意累加答案过程中相乘的两个int是否也会溢出.AC代码#include <bits/stdc++.h>#define rep(i,原创 2021-07-20 22:57:13 · 110 阅读 · 0 评论 -
USACO 1.3.5 双重回文
1.3.5 双重回文题目考查字符串和数字相互转化, 进制转换, 判断回文数字解题思路本题和上一题几乎是一样的, 不多赘述了.➡️上题链接⬅️题目细节➡️上题链接⬅️AC代码#include <bits/stdc++.h>#define rep(i, n) for (int i = 1; i <= (n); ++i)using namespace std;typedef long long ll;bool fact(int x, int b) { string s原创 2021-07-20 14:55:26 · 78 阅读 · 0 评论 -
USACO 1.3.4 回文平方
1.3.4 回文平方题目考查字符串和数字相互转化, 进制转换, 判断回文数字解题思路首先我们理清我们都需要实现哪些操作:把一个十进制数字转化为B进制判断一个数字是否为回文数字对于十进制转化为B进制: 我们只需要模拟以前学的"短除法"即可, 最后把得到的数字逆序后即为所求.对于判断数字是否是回文数字: 对于一个int类型而言, 判断这个数字是否回文是很不方便的. 我们通常的做法就是把它转换成字符串类型, 然后模拟我们人脑判断的方式即可.题目细节C++内部实现了string类型, 和ch原创 2021-07-20 14:53:46 · 186 阅读 · 0 评论 -
USACO 1.3.3 序号命名
1.3.3 序号命名题目考查模拟解题思路由于数字按键与名字是一对多的关系, 因此我们每次读取名字后, 将其变回数字的形式, 判断是否与给出的数字相同即可.考虑到将字符变回数字的方式: 我们最笨的情况枚举所有字母也是可以的. 或者找规律简化代码.题目细节题目说编号的长度为1~12, 因此注意开long long.AC代码#include <bits/stdc++.h>#define rep(i, n) for (int i = 1; i <= (n); ++i)us原创 2021-07-08 23:06:10 · 188 阅读 · 0 评论 -
USACO 1.3.2 转换
1.3.2 转换题目考查矩阵变换解题思路首先对于矩阵的操作, 我们可以拆分出两个基础函数: 矩阵转置, 矩阵左右翻转.旋转操作: 如果要把矩阵顺时针旋转90度, 则把矩阵转置后, 左右翻转即可. 若要顺时针旋转180度 / 270度, 则执行 2 / 3次旋转90度即可.镜像操作: 左右翻转即可.对于本题, 我们从前向后依次尝试7种转换方式是否成立即可.题目细节一个结论: 当我们想把一个矩阵顺时针旋转90度时, 我们可以先将其转置, 再将其左右翻转.读取字符串, 如果从下标1位置开始原创 2021-07-08 23:05:30 · 103 阅读 · 0 评论 -
USACO 1.3.1 挤牛奶
1.3.1 挤牛奶题目考查区间合并解题思路我们将所有挤奶的区间按照左端点从小到大排序, 遍历所有区间.不妨设当前连续的区间为[L, R], 遍历到的新区间为[l, r]. 此时有两种情况:情况①: [l, r] 与 [L, R] 有交集. 则我们可以把新区间加入到老区间当中. 由于l >= L, 所以左端点无需更新, 更新右端点, 执行R = max(R, r)即可.情况②: [l, r] 与 [L, R] 无交集. 则我们更新最长连续挤奶时间r1, 最长连续无人挤奶时间r2. 其中有:原创 2021-07-08 23:04:57 · 260 阅读 · 0 评论 -
USACO 1.2.4 断开的项链
1.2.4 断开的项链题目考查拆环, *多情况记录解题思路对于这种成环问题, 一般都会对拆环进行考察.对于本题, 我们需要选择在一个位置断开, 使得环变成链.环变成不同的链, 相当于进行了rotate操作(整体旋转). 其内部的元素的顺序结构实际上没有发生变化(我不知道这样表达是否准确). 我们通常的做法是, 把环内元素扩增一倍. 假设元素总数为n, 如果我们在第一个位置前断开, 我们得到的区间为**[1, n]. 在第二个位置前断开, 得到区间[2, n + 1]**. 以此类推, 我们就可以原创 2021-07-08 23:04:26 · 159 阅读 · 0 评论 -
USACO 1.2.3 十三号星期五
1.2.3 十三号星期五题目考查日期模拟解题思路对于本题而言, 我们需要知道每个月的13号是星期几. 因此我们可以循环年和月, 通过%7的方式让星期循环.(本题解题具体可以看代码, 并不是很好叙述)题目细节本类题通常伴随判断闰年, 注意书写方式.本类题通常伴随手写month数组, 注意下标和月份的对齐.对于本题而言, 计算从1900开始的N年内, 注意最后一年为1900 + N - 1.本题的 星期 属性, 存在周期规律, 循环周期为7, 请习惯余数为0的情况表示7. (不要非得映射到原创 2021-07-08 23:03:47 · 130 阅读 · 0 评论 -
USACO 1.2.2 贪婪的送礼者
1.2.2 贪婪的送礼者题目考查模拟, 字符串哈希解题思路第一个问题, 我们的所有操作是通过人名来进行操作的, 但通常我们操作的数据结构都是通过下标来进行检索的.如果我们把人名这个属性去掉. 每次操作我们都说第几个人(指下标), 那我们直接用代码模拟即可.因此我们需要解决的问题就是: 如何把人名映射成下标.C++的STL提供了map / unordered_map 方便我们做映射. 因此我们可以直接借STL实现string->int.第二个问题, 如果我们通过STL实现了映射, 但最原创 2021-07-08 23:03:11 · 118 阅读 · 0 评论 -
USACO 1.2.1 你的旅途由此开始
1.2.1 你的旅途由此开始题目考查字符串模拟, 字符串哈希解题思路我们直接按照题意去模拟即可.题目细节我们将字符串进行转化时, 可以边乘边取模. 这样可以防止数据溢出(虽然本题连int都不会爆).AC代码#include <bits/stdc++.h>#define rep(i, n) for (int i = 1; i <= (n); ++i)using namespace std;typedef long long ll;int get(const char&原创 2021-07-08 23:02:29 · 127 阅读 · 0 评论