CCF GESP 2024年3月认证 C++ 6级

编程题
共 2 道 每题 25 分 共计 50 分
第 1 题
游戏
时间限制:1s 内存限制:512MB

题目描述

你有四个正整数 $n,a,b,c$,并准备用它们玩一个简单的小游戏。

在一轮游戏操作中,你可以选择将 $n$ 减去 $a$,或是将 $n$ 减去 $b$。游戏将会进行多轮操作,直到当 $n \leq c$ 时游戏结束。

你想知道游戏结束时有多少种不同的游戏操作序列。两种游戏操作序列不同,当且仅当游戏操作轮数不同,或是某一轮游戏操作中,一种操作序列选择将 $n$ 减去 $a$,而另一种操作序列选择将 $n$ 减去 $b$。如果 $a=b$,也认为将 $n$ 减去 $a$ 与将 $n$ 减去 $b$ 是不同的操作。

由于答案可能很大,你只需要求出答案对 $10^9 + 7$ 取模的结果。

输入格式

一行四个正整数 $n,a,b,c$。 保证 $1 \leq a,b,c \leq n$。

输出格式

一行一个整数,表示不同的游戏操作序列数量对 $10^9 + 7$ 取模的结果。

样例说明

样例 1

输入:
1 1 1 1
输出:
1

样例 2

输入:
114 51 4 1
输出:
176

样例 3

输入:
114514 191 9 810
输出:
384178446

数据范围

对于 $20\%$ 的测试点,保证 $a=b=c=1$,$n \leq 30$。

对于 $40\%$ 的测试点,保证 $c = 1$,$n \leq 10^3$。

对于所有测试点,保证 $1 \leq n \leq 2 \times 10^5$。

第 2 题
好斗的牛
时间限制:1s 内存限制:512MB

题目描述

你有 $10^9$ 个牛棚,从左到右一字排开。你希望把 $n$ 头牛安置到牛棚里。麻烦的是,你的牛很好斗,如果他们附近有其他的牛,他们就会不安分地去挑事。其中,第 $i$ 头牛的攻击范围是 $(a_i, b_i)$,这意味着,如果他的左边 $a_i$ 个牛棚或者右边 $b_i$ 个牛棚有其他牛,它就会去挑事。

你想留下一段连续的牛棚,并把其他牛棚都卖掉。请问您最少需要留下多少牛棚,才能保证至少存在一种方案能够把所有的 $n$ 头牛都安置进剩余的牛棚里,且没有牛会挑事?

输入格式

第一行 1 个正整数 $n$。

接下来一行 $n$ 个用空格隔开的正整数 $a_1, a_2, \dots a_n$。

接下来一行 $n$ 个用空格隔开的正整数 $b_1, b_2, \dots b_n$。

输出格式

输出一行一个整数,表示你最少需要留下多少牛棚。

样例说明

样例 1

输入:
2
1 2
1 2
输出:
4
样例解释:

你可以留下第 1、2、3、4 个牛棚,并在第 1、4 两个牛棚分别放下两头牛。

样例 2

输入:
3
1 2 3
3 2 1
输出:
7

数据范围

对于 20% 的测试点,保证 n=2。

对于另外 20% 的测试点,保证 n=3。

对 80% 的测试点,保证 n≤8。

对于所有测试点,保证 1≤n≤9,$1≤a_i,b_i​≤1000$。

编程题部分已到底了。