USACO 2021 December Contest, Bronze

Problem 1. Lonely Photo

Farmer John 最近购入了 N 头新的奶牛(3≤N≤5×10^5),每头奶牛的品种是更赛牛(Guernsey)或荷斯坦牛(Holstein)之一。

奶牛目前排成一排,Farmer John 想要为每个连续不少于三头奶牛的序列拍摄一张照片。 然而,他不想拍摄这样的照片,其中只有一头牛的品种是更赛牛,或者只有一头牛的品种是荷斯坦牛——他认为这头奇特的牛会感到孤立和不自然。 在为每个连续不少于三头奶牛的序列拍摄了一张照片后,他把所有「孤独的」照片,即其中只有一头更赛牛或荷斯坦奶牛的照片,都扔掉了。

给定奶牛的排列方式,请帮助 Farmer John 求出他会扔掉多少张孤独的照片。如果两张照片以不同的奶牛开始或结束,则认为它们是不同的。

输入格式(从终端 / 标准输入读入):

输入的第一行包含 N。

输入的第二行包含一个长为 N 的字符串。如果队伍中的第 i 头奶牛是更赛牛,则字符串的第 i 个字符为 G。否则,第 i 头奶牛是荷斯坦牛,该字符为 H。

输出格式(输出至终端 / 标准输出):

输出 Farmer John 会扔掉的孤独的照片数量。

输入样例:

5
GHGHG

输出样例:

3

这个例子中的每一个长为 3 的子串均恰好包含一头更赛牛或荷斯坦牛——所以这些子串表示孤独的照片,并会被 Farmer John 扔掉。所有更长的子串(GHGH、HGHG 和 GHGHG)都可以被接受。

测试点性质:

  • 测试点 2-4 满足 N≤50。
  • 测试点 5-10 满足 N≤5000。
  • 为了增加一些挑战,测试点 11 没有额外限制。注意这个测试点的答案可能无法用标准的 32 位整数型存储,你可能需要使用更大的整数类型(例如,C++ 中 64 位的 "long long int" 类型)。

供题:Nick Wu


Problem 2. Air Cownditioning

 Farmer John 的 N 头奶牛对他们牛棚的室温非常挑剔。有些奶牛喜欢温度低一些,而有些奶牛则喜欢温度高一些。

Farmer John 的牛棚包含一排 N 个牛栏,编号为 1…N,每个牛栏里有一头牛。 第 i 头奶牛希望她的牛栏中的温度是 pi,而现在她的牛栏中的温度是 ti。为了确保每头奶牛都感到舒适,Farmer John 安装了一个新的空调系统。该系统进行控制的方式非常有趣,他可以向系统发送命令,告诉它将一组连续的牛栏内的温度升高或降低 1 个单位——例如「将牛栏 5…8 的温度升高 1 个单位」。一组连续的牛栏最短可以仅包含一个牛栏。

请帮助 Farmer John 求出他需要向新的空调系统发送的命令的最小数量,使得每头奶牛的牛栏都处于其中的奶牛的理想温度。

输入格式(从终端 / 标准输入读入):

输入的第一行包含 N。下一行包含 N 个非负整数 p1…pN,用空格分隔。最后一行包含 N 个非负整数 t1…tN。

输出格式(输出至终端 / 标准输出):

输出一个整数,为 Farmer John 需要使用的最小指令数量。

输入样例:

5
1 5 3 3 4
1 2 2 2 1

输出样例:

5

一组最优的 Farmer John 可以使用的指令如下:

初始温度     :1 2 2 2 1
升高牛棚 2..5:1 3 3 3 2
升高牛棚 2..5:1 4 4 4 3
升高牛棚 2..5:1 5 5 5 4
降低牛棚 3..4:1 5 4 4 4
降低牛棚 3..4:1 5 3 3 4

【测试点性质】

  • 测试点 2-5 满足 N≤100N≤100。
  • 测试点 6-8 满足 N≤1000N≤1000。
  • 测试点 9-10 满足 N≤100,000N≤100,000。
  • 测试点 1-6 和 9 中,温度值不超过 100100。
  • 测试点 7-8 和 10 中,温度值不超过 10,00010,000。

供题:Brian Dean


Problem 3. Walking Home

奶牛 Bessie 正准备从她最喜爱的草地回到她的牛棚。

农场位于一个N×N 的方阵上(2≤N≤50),其中她的草地在左上角,牛棚在右下角。Bessie 想要尽快回家,所以她只会向下或向右走。有些地方有草堆(haybale),Bessie 无法穿过;她必须绕过它们。

Bessie 今天感到有些疲倦,所以她希望改变她的行走方向至多 K 次(1≤K≤3)。

Bessie 有多少条不同的从她最爱的草地回到牛棚的路线?如果一条路线中 Bessie 经过了某个方格而另一条路线中没有,则认为这两条路线不同。

【输入格式(从终端 / 标准输入读入)】

每个测试用例的输入包含 T 个子测试用例,每个子测试用例描述了一个不同的农场,并且必须全部回答正确才能通过整个测试用例。输入的第一行包含 T(1≤T≤50)。每一个子测试用例如下。

每个子测试用例的第一行包含 N 和 K。

以下 N 行每行包含一个长为 N 的字符串。每个字符为 .,如果这一格是空的,或 H,如果这一格中有草堆。输入保证农场的左上角和右下角没有草堆。

【输出格式(输出至终端 / 标准输出)】

输出 T 行,第i行包含在第 i 个子测试用例中 Bessie 可以选择的不同的路线数量。

输入样例:

7
3 1
...
...
...
3 2
...
...
...
3 3
...
...
...
3 3
...
.H.
...
3 2
.HH
HHH
HH.
3 3
.H.
H..
...
4 3
...H
.H..
....
H...

输出样例:

2
4
6
2
0
0
6

我们将使用一个由字符 D 和 R 组成的字符串来表示 Bessie 的路线,其中 D 和 R 分别表示 Bessie 向下(down)或向右(right)移动。

第一个子测试用例中,Bessie 的两条可能的路线为 DDRR 和 RRDD。

第二个子测试用例中,Bessie 的四条可能的路线为 DDRR,DRRD,RDDR 和 RRDD。

第三个子测试用例中,Bessie 的六条可能的路线为 DDRR,DRDR,DRRD,RDDR,RDRD 和 RRDD。

第四个子测试用例中,Bessie 的两条可能的路线为 DDRR 和 RRDD。

第五和第六个子测试用例中,Bessie 不可能回到牛棚。

第七个子测试用例中,Bessie 的六条可能的路线为 DDRDRR,DDRRDR,DDRRRD,RRDDDR,RRDDRD 和 RRDRDD。

【测试点性质】

  • 测试点 2 满足 K=1。
  • 测试点 3-5 满足K=2。
  • 测试点 6-10 满足 K=3。

供题:Nick Wu

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值