USACO(算法竞赛入门)
小王子y
互关啊!!
展开
-
USACO巨大牛棚(DP)
农夫约翰想在他的正方形农场中建一个巨大的正方形牛棚。他不愿意在农场中砍伐树木,因此,他想要找一片平坦的土地,可以让他不需伐木就可直接在那里进行牛棚的搭建。为了达到这一目的,我们将他的农场划分为 N×N 个方格区域。给定包含树木的方格区域的数量,以及这些区域的具体位置。请你计算,他在不砍伐树木的情况下,最大可以建造多大的牛棚。搭建牛棚时,牛棚的四个边必须是水平或垂直的。下面是一个农场的示例,其中,包含树木的方格区域用 “#” 表示,不包含树木的方格区域用 “.” 表示,具体表示为:1 2 3 4原创 2021-03-08 23:37:14 · 270 阅读 · 0 评论 -
喧嚣摇滚乐队(DP,DFS)
你刚刚买下了喧嚣摇滚乐队还未发行的 N 首歌曲的版权。你打算从这些歌曲中进行筛选,找出满意的作品发行 M 张唱片。一首歌只能出现在一张唱片中。每张唱片的歌曲总时长不能超过 T。你将以如下规则进行歌曲的挑选:所有歌曲必须按照创作时间从前到后的顺序,依次收录在所有的唱片中。(也就是说,对于任意两张唱片 i 和 j,如果 i<j,则唱片 i 中的创作最晚的歌曲的创作时间必须满足早于唱片 j 中创作最早的歌曲的创作时间。)要尽可能的使这 M 张唱片收录歌曲的总数最大。输入格式第一行包含三个整数原创 2021-03-03 20:19:49 · 156 阅读 · 1 评论 -
最长前缀(DP,字符串哈希)
一些生物的结构组成可以由大写字母序列来表示。生物学家们喜欢将长序列拆分成较短序列来进行研究。给定一个由若干短序列构成的集合 P,如果从中选取部分元素(可使用多次)能够拼接成一个序列 S,那么就说 S 由 P 组成。S 可以只包含 P 中的部分元素,例如,序列 ABABACABAAB 就可以由集合 {A,AB,BA,CA,BBC} 组成S 的前 K 个字符称为 S 的长度为 K 的前缀。现在给定一个短序列集合 P 以及一个大写字母序列 S,请你求出可以由集合 P 组成的 S 的最长前缀的长度是多原创 2021-03-02 18:44:55 · 499 阅读 · 0 评论 -
得分通胀(完全背包)
学生们在 USACO的竞赛中得分越多,我们就越感到高兴。所以我们要尽量将竞赛设计的能够让更多人得到更高的分。为了达到这一目的,请你帮助我们选择一些题目作为比赛用题。共有 N 种类别的题可以让我们进行选择,同一类别的题做对所花的时间以及得到的分数都是相同的。每种类型的题目出现在一次竞赛中的数量不限,竞赛的时长为 M,即所选题目的总耗时不得超过 M,但可以小于 M。请问,我们如何安排各种类型的题目在竞赛中出现的数量,能够使得用户的得分最多。竞赛中不一定要出现所有类型的题目。输出用户可能的最高得分。原创 2021-02-27 20:29:38 · 110 阅读 · 0 评论 -
牛之关系谱(DP)
农夫约翰正在考虑买进一批新的牛群。在这个新的牛群中,每头母牛都会生两个孩子。牛的关系可以用一个包含 N 个节点的二叉树来表示,此二叉树应满足下列性质:每个节点的子节点数为 0 或 2。树的高度等于 K。树的高度是指从根节点到任一叶子节点的最长路径上的节点数。叶子节点是指没有子节点的节点。请问,共有多少种可能的谱系结构?换句话说,共有多少种满足上述性质的 N 个节点的二叉树?请输出对 9901 取模后的答案。输入格式共一行,包含两个整数 N 和 K。输出格式共一行,包含一个整数,表示对原创 2021-02-28 01:32:36 · 181 阅读 · 0 评论 -
控股公司(DFS)
一些公司会通过购买其他公司的部分股份以达到控制这些公司的目的。一般来说,如果能够满足以下条件中的至少一项,则公司 A 将会控制公司 BB:公司 A = 公司 B公司 A 持有公司 B 超过 50% 的股份公司 A 控制着 K 个公司,这些公司表示为 C1,C2,…,CK,公司 Ci 持有的公司 B 的股份为 Xi%,X1+…+XK>50注意:控股关系具有传递性,即如果公司 A 控股公司 B,公司 B 控股公司 C,那么公司 A 控股公司 C。数据保证控股关系不存在环。给定一个三元组列表原创 2021-03-01 19:26:48 · 165 阅读 · 0 评论 -
USACO子集的和(背包问题)
对于很多由 1∼N 构成的连续整数集合,我们都可以将其划分为两个子集,并使得两个子集的和相等。例如,当 N=3 时,我们可以将集合 {1,2,3} 划分为子集 {1,2} 和 {3},这也是唯一的一种满足条件的划分方式。当 N=7 时,共有四种满足条件的划分方式,如下所示{1,6,7}{1,6,7} 和 {2,3,4,5}{2,3,4,5}{2,5,7}{2,5,7} 和 {1,3,4,6}{1,3,4,6}{3,4,7}{3,4,7} 和 {1,2,5,6}{1,2,5,6}{1,2,4,7原创 2021-02-04 22:24:48 · 224 阅读 · 0 评论 -
USACO蜗牛漫步(DFS)
蜗牛莎莉喜欢在一个 N×N 的方格矩阵中散步。她每次都从左上角出发。方格矩阵中有空地(用 “.” 表示)和障碍(用 “#” 表示)。下面是一个具体示例: A B C D E F G H 1 S . . . . . # . 2 . . . . # . . . 3 . . . . . . . . 4 . . . . . . . . 5 . . . . . # . . 6 # . . . . . . . 7 . . . . . . . .原创 2021-01-28 21:51:16 · 264 阅读 · 0 评论 -
USACO汉明码(DFS,二进制)
给定三个整数 N,B,D,请你找到 N 个长度为 B 位的编码(编码中每位只能是 0 或 1),使得这 N 个编码两两之间的汉明距离都不小于 D。两个编码之间的汉明距离是指两个编码在二进制表示下不同二进制位的数目。例如,编码 0x554 和编码 0x234 在二进制表示下的位差异如下所示(0x554 是指在十六进制下的数字 554): 0x554 = 0101 0101 0100 0x234 = 0010 0011 0100 不同位: -XXX -XX- ----因为有 5 个数位原创 2021-01-26 00:21:23 · 211 阅读 · 0 评论 -
USACO零和序列(暴力DFS)
给定一个由 1∼N 构成的序列:1,2,…,N。现在,你要在序列的数字与数字之间插入一些符号,插入+表示加法运算,插入-表示减法运输,插入(空格)表示数字合并为一个数。在全部插入完毕后,将得到一个可以看作表达式的新序列。计算该表达式的结果,看看结果是否为 0。现在,请你编写一个程序,给定整数 N,找到并输出所有的长度为 N 且总和为零的序列。输入格式共一行,包含一个整数 N。输出格式按照 ASCII 码的顺序输出所有满足条件的序列,每个序列占一行。数据范围3≤N≤9输入样例:7输出原创 2021-01-26 17:24:49 · 193 阅读 · 0 评论 -
USACO循环数(DFS)
循环数是一种没有重复数字且不含 0 并具有一些有趣性质的整数。我们以 81362 为例:如果从最左边的那个数字(在这里是 8)开始,向右数该数字位(当数到最右边的数字时,若还没有数完,则从左边第一位继续数),你将在一个新的数字处停下(如果没停在新数字上,则这个数不是循环数)。对于本例,从 8 开始右数 8 位:1 3 6 2 8 1 3 6,将停在 6 上。在新停下的位置,继续重复上一个操作,也就是从 66 开始右数 6 位:2 8 1 3 6 2,将停在 2 上。再次重复此操作,从 2原创 2021-01-26 18:22:16 · 144 阅读 · 0 评论 -
USACO阶乘(数论)
#include <bits/stdc++.h>using namespace std;const int MOD = 1e9;int main() { int n; cin >> n; long long fac = 1; for(int i = 1; i <= n; i++) { fac *= i; while(!(fac % 10)) fac /= 10; fac %= MOD ;原创 2021-01-25 00:16:36 · 236 阅读 · 0 评论 -
USACO货币系统(完全背包解析)
给定 V 种货币(单位:元),每种货币使用的次数不限。不同种类的货币,面值可能是相同的。现在,要你用这 V 种货币凑出 N 元钱,请问共有多少种不同的凑法。输入格式第一行包含两个整数 V 和 N。接下来的若干行,将一共输出 V 个整数,每个整数表示一种货币的面值。输出格式输出一个整数,表示所求总方案数。数据范围1≤V≤25,1≤N≤10000答案保证在long long范围内。输入样例:3 101 2 5输出样例:10#include <iostream>原创 2021-01-23 19:53:41 · 269 阅读 · 0 评论 -
USACO健康的荷斯坦奶牛(DFS,二进制暴力枚举)
农夫约翰以拥有世界上最健康的奶牛而感到自豪。奶牛想要保持健康,每天就要补充足量的多种维生素。约翰为奶牛们准备了多种牛饲料,每种牛饲料中都富含奶牛所需的多种维生素,但是每种维生素的具体含量可能并不相同。每种牛饲料每天最多只能喂给奶牛们一勺,也就是说每种饲料可以选择不喂给奶牛,或喂给奶牛一勺的量。现在给定所有饲料的每种维生素的(每勺)具体含量,以及奶牛对于每种维生素的每日最低需求量。请你求出,保证奶牛各种维生素的每日摄入量达标的情况下,最少需要喂给奶牛多少勺饲料。数据保证有解。输入格式第一行包含原创 2021-01-19 20:34:17 · 539 阅读 · 0 评论 -
USACO有序分数
给定一个整数 N,请你求出所有分母小于或等于 N,大小在 [0,1] 范围内的最简分数,并按从小到大顺序依次输出。例如,当 N=5 时,所有满足条件的分数按顺序依次为:0/1,1/5,1/4,1/3,2/5,1/2,3/5,2/3,3/4,4/5,1/1输入格式共一行,包含一个整数 N。输出格式按照从小到大的顺序,输出所有满足条件的分数。每个分数占一行,格式为 a/b,其中 a 为分子, b 为分母。数据范围1≤N≤160输入样例:5输出样例:0/11/51/41/32/原创 2021-01-19 19:26:29 · 410 阅读 · 0 评论 -
USACO穿梭谜题(DFS)
大小为 3 的穿梭谜题由三个白石子三个黑石子和带着七个孔的木板组成。最初,将白石子放在木板左端的孔中,黑石子放在右端的孔中,中间的孔空着。最终,要将白石子移动到右端,将黑石子移动到左端。初始状态:WWW_BBB最终状态:BBB_WWW在解决这一问题时,共有两种移动石子的方法:将一个石子移动至相邻的空孔之中。将一个石子跳过一个与它不同色的石子,移动至空孔之中。石子不能往回走,也不能一次跳过两个或以上的石子。一个大小为 N 的穿梭谜题,应该由 N 个白石子,N 个黑石子以及有 2N+1 个空孔原创 2021-01-18 23:59:04 · 255 阅读 · 0 评论 -
USACO城堡(并查集)
农夫约翰购买的彩票中了大奖,这让他赢得了一座坐落于爱尔兰乡村的如同神话一般的城堡!约翰想要将关于城堡的一切统统告诉奶牛,让它们一起分享他的快乐。在这之前,他需要知道城堡中共有多少个房间,最大的房间有多大。此外,他还想拆掉一堵墙从而腾出一个更大的房间来。城堡的平面图可以被划分为 N×M个方格区域,每个方格区域可以有0~4面墙。当然,城堡的外边缘一定都是墙壁,从而防止风吹雨打。参考一下下面这个带注释的城堡平面图: 1 2 3 4 5 6 7 ########原创 2021-01-18 16:26:37 · 212 阅读 · 0 评论 -
USACO挤牛奶(区间合并)
每天早上 5 点,三名农夫去牛场给奶牛们挤奶。现在从 5 点开始按秒计时,第一名农夫在第 300 秒开始给牛挤奶,并在第 1000秒停止挤奶。第二名农夫在第 700 秒开始给牛挤奶,并在第 1200 秒停止挤奶。第三名农夫在第 1500 秒开始给牛挤奶,并在第 2100 秒停止挤奶。从开始挤奶到挤奶完全结束,这一期间,至少存在一名农夫正在挤奶的连续时间段的长度最长为 900 秒(第 300 秒至第 1200 秒),完全没有任何农夫在挤奶的连续时间段的长度最长为 300 秒(第 1200 秒至第 15原创 2021-01-18 00:45:43 · 250 阅读 · 0 评论 -
USACO转换(矩阵变换,模拟)
我们现在要将一个 N×N大小的由黑白瓷砖构成的正方形图案转换为一个新的正方形图案。共有 7 种转换方式如下:90 度旋转:将图案顺时针旋转 90 度。180 度旋转:将图案顺时针旋转 180 度。270 度旋转:将图案顺时针旋转 270 度。镜像:沿着图片的中间垂直线翻转图片,使其变为自身的镜像。组合:先进行镜像转换,再按照 1∼3 中的一种方式进行转换。不改变:保持原图案,不做任何改变。无效转换:上述任何一种方式都无法得到新图案。如果只允许使用上述方式中的一种进行图形转换,能否将原图原创 2021-01-17 23:31:42 · 180 阅读 · 1 评论 -
USACO序号命名(模拟)
威斯康星州的大型牧场的主人们喜欢用连续的数字编号给奶牛们命名。但是奶牛们并不喜欢这种看似非常方便的命名方式。它们希望能够用它们喜欢的名字来互相称呼,而不是像这样“交个朋友吧,4734”。现在,请你帮助可怜的牧牛人将这些奶牛的编号转换为一个与其编号有所关联的名字。因为这些奶牛们都配有电话座机,因此请使用如下所示的电话的标准按键映射,来将数字转换为可能的字母(注意,没有 Q 和 Z):2: A,B,C 5: J,K,L 8: T,U,V3: D,E,F 6: M,N,O原创 2021-01-17 22:15:28 · 192 阅读 · 0 评论 -
USACO断开的项链(新技巧枚举)
你有一条由 N 个珠子串成的项链,珠子的颜色有红、白、蓝三种,珠子在项链中呈随机分布。例如N=29 时,两个项链的示例如下所示: 1 2 1 2 r b b r b r r b r b b b r r原创 2021-01-17 19:19:28 · 318 阅读 · 0 评论 -
USACO双重回文(进位制)
回文数是指数字从前往后读和从后往前读都相同的数字。例如,12321 是一个回文数,77778 不是一个回文数。当然回文数没有前导 00 和尾数 00,因此 0220 不是一个回文数。我们观察数字 21,它在十进制表示下不是一个回文数,但是在二进制表示下它却是一个回文数(10101)。现在请你编写一个程序,读入两个整数 N 和 S,输出满足大于 并且至少在两种进制表示下(二进制至十进制)都是回文数的前 N 个整数。输入格式共一行,包含两个整数 N 和 S。输出格式共 N 行,每行输出一个满足原创 2021-01-14 17:39:07 · 182 阅读 · 0 评论 -
USACO回文平方(进位制)
回文数是指数字从前往后读和从后往前读都相同的数字。例如数字 12321就是典型的回文数字。现在给定你一个整数 B,请你判断 1∼300之间的所有整数中,有哪些整数的平方转化为B 进制后,其 B 进制表示是回文数字。输入格式一个整数 B。输出格式每行包含两个在 B 进制下表示的数字。第一个表示满足平方值转化为 B 进制后是回文数字那个数,第二个数表示第一个数的平方。所有满足条件的数字按从小到大顺序依次输出。数据范围2≤B≤20,对于大于 9 的数字,用 A 表示 10,用 B 表示 1原创 2021-01-14 17:22:07 · 136 阅读 · 1 评论 -
USACO滑雪场设计(枚举)
农夫约翰的农场上有 N 个山丘,每座山的高度都是整数。在冬天,约翰经常在这些山上举办滑雪训练营。不幸的是,从明年开始,国家将实行一个关于滑雪场的新税法。如果滑雪场的最高峰与最低峰的高度差大于17,国家就要收税。为了避免纳税,约翰决定对这些山峰的高度进行修整。已知,增加或减少一座山峰 x 单位的高度,需要花费 x的平方 的金钱。约翰只愿意改变整数单位的高度。请问,约翰最少需要花费多少钱,才能够使得最高峰与最低峰的高度差不大于17。输入格式第一行包含整数 N。接下来 N 行,每行包含一个整数原创 2021-01-11 19:42:10 · 210 阅读 · 0 评论 -
USACO密码运算(枚举)
给定一个如下乘法算式: * * * x * * ------- * * * * * * ------- * * * *现在,给定 N 个 1∼9之间的数字,请你在这些数字中选取合适的数字填入算式,代替 * 号,使得算式成立。所给的数字可以在算式中出现多次。算式中不能出现没有给出的数字。请问,共有多少种不同的填法?输入格式第一行包含整数 N。第二行包含 N 个整数,表示给定的数字,数据保原创 2021-01-11 18:22:28 · 164 阅读 · 0 评论 -
USACO修理牛棚(贪心)
在一个下着暴风雨的夜晚,大风掀翻了农夫约翰的牛棚的屋顶和大门。牛棚一个个的并排排成一排,奶牛就住在牛棚中过夜。由于一些奶牛正在外面度假,牛棚并没有住满,有的牛棚住着牛,有的牛棚空着。所有的棚子的宽度都相同。现在,约翰需要订购一批木板用来挡在牛棚的门口。木材供应商将为他提供任意长度的木板,但是能够提供的木板数量非常有限。约翰希望他购买的木板的总长度尽可能的小。现在,给定可以购买的最大木板数量 M,牛棚的总数 S,牛的总数 C,以及 C 个住着牛的牛棚编号。请你计算确保购买的木板的总长度尽可能小原创 2021-01-11 17:51:17 · 345 阅读 · 0 评论 -
USACO搭配牛奶(贪心)
开心乳制品制作公司从奶农们手里采购牛奶,并将其加以包装,卖给零售店。这样我们就可以从零售店买牛奶喝了。由于牛奶加工这一行业的利润实在是很低,为了尽可能的降低成本,就需要尽可能的以低价向奶农购进牛奶。开心乳制品制作公司拥有非常出色的营销部门,并且确切地知道他们每天需要多少牛奶进行包装卖给客户。公司与多个奶农签有牛奶订购合同,不同奶农提供的牛奶的价格可能不同。由于,奶牛的产奶量十分固定,所以奶农们也可以确定他们每天可以提供多少牛奶。每天,公司可以从奶农那里购进任意整数单位的牛奶,当然,购进数量不能超原创 2021-01-11 17:01:09 · 176 阅读 · 0 评论 -
USACO 优质牛肋骨(DFS)
农夫约翰的牛总是能够产出最优质的肋骨。你可以通过查看约翰和美国农业部一对一地刻在每根肋骨上的数字来分辨它们。约翰可以保证购买他的牛肋骨的消费者们一定可以得到最优质的肋骨。因为每当从肋骨的右侧切下一部分卖给消费者时,剩下的相连的肋骨上的数字始终都能保持是一个质数。(单词 primeprime 作形容词可以表示优质的,作名词可以表示质数,这里一语双关)例如,有四根肋骨连在一起,构成质数 7331,当卖掉最右边一根时,剩下的三个肋骨构成质数 733,再卖掉一根,剩下两根肋骨构成质数 7373,再卖掉一根,原创 2021-01-10 22:01:52 · 356 阅读 · 0 评论 -
回文质数(线性筛质数)
151 既是一个质数,又是一个回文数,因此它可以被称为回文质数。现在给定两个整数 a,b,请你找出在 [a,b] 范围内的所有回文质数。输入格式共一行,包含两个整数 a,b。输出格式按照从小到大的顺序输出所求范围内的所有回文质数。每个数占一行。数据范围5≤a<b≤10的8次方输入样例:5 500输出样例:5711101131151181191313353373383#include <iostream>#include <cstr原创 2021-01-09 01:45:12 · 1259 阅读 · 0 评论 -
母亲的牛奶(BFS,DFS)
农夫约翰有三个容量分别为 A,B,C升的挤奶桶。最开始桶 A 和桶 B 都是空的,而桶 C 里装满了牛奶。有时,约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。这一过程中间不能有任何停顿,并且不会有任何牛奶的浪费。请你编写一个程序判断,当 A 桶是空的时候,C 桶中可能包含多少升牛奶,找出所有的可能情况。输入格式共一行,包含三个整数 A,B,C。输出格式共一行,包含若干个整数,表示 C 桶中牛奶存量的所有可能情况,请将这些数字按升序排列。数据范围1≤A原创 2021-01-09 01:28:17 · 743 阅读 · 0 评论 -
十三号星期五(日期处理)
十三号星期五真的很不常见吗?每个月的十三号是星期五的频率是否比一周中的其他几天低?请编写一个程序,计算 N 年内每个月的 13 号是星期日,星期一,星期二,星期三,星期四,星期五和星期六的频率。测试的时间段将会开始于 1900 年 1 月 1 日,结束于 1900+N−1 年 12 月 31日。一些有助于你解题的额外信息:1900年 1 月 1 日是星期一。在一年中,4 月、6 月 9 月、11 月每个月 30 天,22 月平年 2828 天闰年 2929 天,其他月份每个月31天。公历年原创 2021-01-08 23:46:38 · 425 阅读 · 0 评论 -
贪婪的送礼者(字符串 hash表)
有一个由 NP 个人构成的朋友圈,圈内的人决定互相赠送一些金钱作为礼物。他们不一定会给每个人都赠送礼物,当然,也不一定从每个人那里都收到礼物。他们赠送礼物(金钱)的规则如下:每个人都会去银行取一笔钱,然后将这笔钱平均分给他要赠与礼物的人们。注意,没有低于 1 元面值的零钱,因此,如果一个人取了 7 元钱,然后要分给两个朋友,那么每个朋友都将分到 3 元钱,剩下的 1 元钱,将会保留到送礼者的手中。现在给定每一个人的名字,以及每个人要花费的金钱数量和他们要送礼的名单。请你计算一下,每个人收到的金钱原创 2021-01-08 23:21:53 · 264 阅读 · 0 评论 -
你的旅途由此开始(模拟)
有一个众所周知的事实,每个彗星的背后都藏着一个UFO。这些UFO经常到地球来带走一些它们的忠实支持者。不幸的是,UFO的空间有限,每次星际之旅都只能带走一组支持者。为了让所有的支持者团队能够提前知道究竟哪组支持者会被带走,UFO们设计了如下方案:它们给彗星制定一个名称,通过将该名称和某一组支持团队的名称进行比较,从而判断这一组支持团队是否会被带走。具体的比较方式如下:首先,我们将彗星和支持者团队的名称通过以下方式转化为数字:每个大写字母对应一个整数,A对应1,B对应2,…,Z对应26。将名称原创 2020-12-31 18:00:23 · 102 阅读 · 0 评论