[DTOI 2023] A. 小狗哥哥
题目背景
luanmenglei 有一个辉煌的现在:他们班的女同学都叫他易酱。
但谁能想到 luanmenglei 有一个悲伤的过去,他五岁的弟弟叫他小狗哥哥。
题目描述
下文的所有参数均默认为整数。
作为一位(7k7k 小游戏的)游戏开发者,你设计了如下(简陋的不如小狗哥哥幼儿园大班的毕业设计的)游戏,存在两个要素:
- 一个敌对生物,其血量为 m m m。
- 主角的武器,分为 n n n 级,第 i i i 级的伤害是 i × p i\times p i×p。
游戏的平衡性需要提前规划,所以你还有一个序列 { a n } \{a_n\} {an},其含义如下:
- a i a_i ai 表示敌对生物被第 i i i 级武器恰好攻击 a i a_i ai 下会死。
可惜你忘记了 p p p 具体是多少,所以你需要求出所有可能的 p p p 的个数。
如果可能有无数个
p
p
p,那么请输出 xiaogougege
。
输入格式
第一行两个正整数 n , m n,m n,m。
第二行 n n n 个正整数,表示序列 { a n } \{a_n\} {an}。
输出格式
一行一个整数,表示可能的
p
p
p 的个数,或字符串 xiaogougege
,其具体含义见题目描述。
样例 #1
样例输入 #1
3 3
3 2 1
样例输出 #1
1
提示
【样例 1 解释】
当武器为
1
1
1 级时,分析可以发现
p
p
p 要满足
1
≤
p
<
3
2
1 \leq p < \frac{3}{2}
1≤p<23。
当武器为
2
2
2 级时,分析可以发现
p
p
p 要满足
3
4
≤
p
<
3
2
\frac{3}{4} \leq p < \frac{3}{2}
43≤p<23。
当武器为
3
3
3 级时,分析可以发现
p
p
p 要满足
1
≤
p
1 \leq p
1≤p。
又 p p p 是整数。综上,只有当 p = 1 p = 1 p=1 时满足题目所述条件。
【样例 2】
见附加文件中的 game/game2.in
与 game/game2.out
。
该样例满足测试点 13 ∼ 20 13\sim 20 13∼20 的限制。
【数据范围与提示】
对于所有测试数据,保证 1 ≤ n ≤ 1 0 5 1\leq n \leq 10^5 1≤n≤105, 1 ≤ a i , m ≤ 1 0 9 1\leq a_i,m\leq 10^9 1≤ai,m≤109。
每个测试点的具体限制见下表:
测试点编号 | n ≤ n\leq n≤ | $m,a_i\leq $ | 特殊性质 |
---|---|---|---|
1 ∼ 9 1\sim 9 1∼9 | 1 0 5 10^5 105 | 1 0 9 10^9 109 | 数据纯随机 |
10 ∼ 12 10 \sim 12 10∼12 | 3 3 3 | 5 5 5 | 无 |
13 ∼ 20 13 \sim 20 13∼20 | 1 0 5 10^5 105 | 1 0 9 10^9 109 | 无 |
你需要注意,上文纯随机数据的具体生成程序代码如下:
#include <bits/stdc++.h>
using namespace std;
int n, m, w;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int rand(int l, int r) {
assert(l <= r);
return uniform_int_distribution<>(l, r)(rng);
}
int main() {
scanf("%d%d%d", &n, &m, &w);
printf("%d %d\n", n, m);
for (int i = 1; i <= n; i ++) printf("%d%c", rand(1, w), " \n"[i == n]);
return 0;
}
通俗的说,就是对于给定的 n , m , w ( w ≤ 1 0 9 ) n,m,w(w\le 10^9) n,m,w(w≤109),数据生成器会随机生成 n n n 个值域在 [ 1 , w ] [1,w] [1,w] 内的数,作为 { a n } \{a_n\} {an}。
Scratch实现
后续
接下来我会不断用scratch来实现信奥比赛中的算法题、Scratch考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容