题解:P11600 『Fwb』流星の陨落
这是一篇 python 题解:
根据题目描述,我们需要计算最少的流星数量以及此时的流星间隔。题目保证第一个发射流星的位置必须是
注意:
-
计算所有差值的最大公约数:
- 初始化
k 为第一个差值w[1] 。 - 遍历数组
w ,计算所有差值的最大公约数。
- 初始化
-
计算最少的流星数量:
- 使用最后一个烟花的位置
a[n] 除以最大公约数k ,得到基本的流星数量。 - 如果
a[n] 不能被k 整除,则需要再增加一颗流星。
- 使用最后一个烟花的位置
import math
import sys
def read():
x = 0
f = 1
ch = sys.stdin.read(1)
while not ('0' <= ch <= '9'):
if ch == '-':
f = -1
ch = sys.stdin.read(1)
while '0' <= ch <= '9':
x = x * 10 + ord(ch) - 48
ch = sys.stdin.read(1)
return x * f
n = read()
a = [0] * (n + 1)
kkk = -10**9
for i in range(1, n + 1):
a[i] = read()
kkk = max(kkk, a[i])
if n == 1:
print(2, a[1] - 1)
sys.exit(0)
w = [0] * n
for i in range(1, n):
w[i] = a[i + 1] - a[i]
k = w[1]
for i in range(2, n):
k = math.gcd(k, w[i])
if kkk % k != 0:
print(kkk // k + 1, k)
else:
print(kkk // k, k)