#3948. [GESP2403 六级] 游戏

[GESP2403 六级] 游戏

游戏

题目描述

你有四个正整数 ,并准备⽤它们玩⼀个简单的⼩游戏。 在⼀轮游戏操作中,你可以选择将 减去 ,或是将 减去 。游戏将会进⾏多轮操作,直到当 时游戏结束。 你想知道游戏结束时有多少种不同的游戏操作序列。两种游戏操作序列不同,当且仅当游戏操作轮数不同,或是某 ⼀轮游戏操作中,⼀种操作序列选择将 减去 ,⽽另⼀种操作序列选择将 减去 。如果 ,也认为将 减去 与将 减去 是不同的操作。 由于答案可能很⼤,你只需要求出答案对 取模的结果。

输入格式

⼀⾏四个正整数 。保证 。

输出格式

⼀⾏⼀个整数,表⽰不同的游戏操作序列数量对 取模的结果。 3.1.4 样例1 1 1 1 1 1 1 1 3.1.5 样例2 1 114 51 4 1 1 176 3.1.6 样例3 1 114514 191 9 810 1 384178446 3.1.7 数据范围 对于 的测试点,保证 , 。 对于 的测试点,保证 , 。 对于所有测试点,保证 。 3.1.8 参考程序 1 #include 2 3 using namespace std; 4 5 const int N = 2e5 + 5; 6 const int mod = 1e9 + 7; 7 8 int n, a, b, c; 9 int f[N << 1]; 10 int ans; 11 12 int main() 13 { 14 scanf("%d%d%d%d", &n, &a, &b, &c); 15 f[N + n] = 1; 16 for (int i = n; i > c; i--) 17 { 18 f[N + i - a] = (f[N + i - a] + f[N + i]) % mod; 19 f[N + i - b] = (f[N + i - b] + f[N + i]) % mod; 20 } 21 for (int i = 0; i <= N + c; i++) 22 ans = (ans + f[i]) % mod; 23 printf("%d\n", ans); 24 return 0; 25 }

样例输入 #1

1 1 1 1 1
1 1

样例输出 #1


样例输入 #2

1 114 51 4 1
1 176
3.1.6 样例3
1 114514 191 9 810
1 384178446

样例输出 #2


数据范围

对于 的测试点,保证 , 。 对于 的测试点,保证 , 。 对于所有测试点,保证 。

知识点与难度

本题涉及的知识点从属于 GESP 6级,难度等级:⭐⭐⭐⭐⭐ 。


测试点分布

Subtask 分值 测试点编号 说明
0 10 1~2 样例
1 20 3~8 小规模 / 特殊性质
2 15 9~11 Hack
3 30 12~20 中大规模
4 25 21~25 随机回归

生测试数据后,按实际 subtask 分组改写上表。