AcWing 222. 青蛙的约会
原题链接
困难
作者:
叶枝黎曼
,
2020-10-31 14:29:09
,
所有人可见
,
阅读 565
经典同余问题
1. 同余方程列出:(m - n)x = b - a + yL (其中 m-n表示差速度 b - a + yL表示差距(含套圈情况), b为y初始位置,a为x初始位置)
2. 同余方程转换为标准式:(m-n)x + Ly = b - a
3. 注意:方程成立条件是 (b - a)% gcd((m - n),L) == 0
python版本
def exGcd(a,b):
if b == 0:
return 1,0,a
x,y,gcd = exGcd(b,a % b)
return y,x - a//b*y,gcd
p1,p2,m,n,L = map(int,input().split())
x,y,gcd = exGcd(m-n,L)
x = x * (p2 - p1) // gcd
n = L // gcd
if (p2 - p1) % gcd != 0:
print('Impossible')
else:
print((x%n + n)%n)