题目背景
翻译自 ROIR 2022 D1T2。
某公司正在开发一种跳跃机器人。为了测试机器人,他们在一个多边形平台上设置了一个由 n 个特殊平台组成的环形路线,平台从 1 到 n 编号。第 i 个平台与 i+1 个平台之间的距离为 di,最后一个平台与第一个平台之间的距离为 dn(假设长度分别为 d1,d2,…,dn 的边可以组成一个 n 边形)。
机器人配备了人工智能,在测试过程中学习跳得更远。在任何时刻,机器人通过一个整数 a 来表示它的灵敏度。如果 a 大于等于 di,机器人可以从平台 i 跳到平台 i+1;同样地,如果 a 大于等于 dn,机器人可以从最后一个平台跳到第一个平台。每次跳跃后,机器人的灵敏度增加 1。
题目描述
机器人的开发人员选择一个平台作为起始平台。如果机器人可以完成 n 次跳跃,回到原来的平台,他们认为实验是成功的。开发人员需要确定机器人的最小起始灵敏度是多少,并选择哪个平台作为起始平台。
输入格式
第一行包含一个整数 n。
第二行包含一个整数 f。
- 如果 f=1,则第三行包含 n 个整数 d1,d2,…,dn,意义见题目背景。
- 如果 f=2,则第三行包含一个整数 m,以及三个整数 x,y,z。第四行包含 m 个整数 c1,c2,…,cm。此时距离值 di 根据以下公式计算:
- 如果 1≤i≤m,则 di=ci。
- 如果 m+1≤i≤n,则 di=((x×di−2+y×di−1+z)mod109)+1。
输出格式
输出两个整数,即最小允许的起始灵敏度 a 和可用于放置机器人的起始平台编号。如果有多个最小起始灵敏度对应的起始平台,可以输出任意一个。
提示
样例说明:
在第二个示例中,距离数组为 [1,2,3,4,5,18,45,112,273,662]。
根据公式计算 d6 到 d10 的值:
- d6=((1⋅d4+2⋅d5+3)mod109)+1=((1⋅4+2⋅5+3)mod109)+1=18;
- d7=((1⋅d5+2⋅d6+3)mod109)+1=((1⋅5+2⋅18+3)mod109)+1=45;
- d8=((1⋅d6+2⋅d7+3)mod109)+1=((1⋅18+2⋅45+3)mod109)+1=112;
- d9=((1⋅d7+2⋅d8+3)mod109)+1=((1⋅45+2⋅112+3)mod109)+1=273;
- d10=((1⋅d8+2⋅d9+3)mod109)+1=((1⋅112+2⋅273+3)mod109)+1=662。
本题使用捆绑测试。
子任务 |
分值 |
特殊性质 |
0 |
15 |
n≤300,f=1,d≤300 |
1 |
17 |
n≤5000,f=2 |
2 |
10 |
n≤100000,f=1 且保证从第一个平台开始跳是最佳选择 |
3 |
20 |
n≤100000,f=1 |
4 |
5 |
f=2 且保证从第一个平台开始跳是最佳选择 |
5 |
33 |
f=2 |
对于 100% 的数据,3≤n≤107。当 f=1 时 1≤di≤109,当 f=2 时 2≤m≤min(n,105),0≤x,y,z≤109,1≤ci≤109。
注:本题的算法标签部分参考了官方题解中用到的解法。