[题解]P1516 青蛙的约会

P1516 青蛙的约会

实际上是一个关于\(k,s\)的不定方程:

\[x+km+sL=y+kn \]

很容易理解,就是走了\(x\)步之后,两只青蛙相差\(s\)圈相遇。

变形得:

\[k(m-n)+sL=y-x \]

有解\(\iff \gcd(m-n,l) \mid y-x\)

exGCD先解决\(k(m-n)+sL=\gcd(m-n,l)\),再将\(k,s\)同乘\(\frac{y-x}{\gcd(m-n,l)}\)即可。

由于\(m-n\)可能存在负数,此时我们将\(x,y\)\(m,n\)分别swap一下即可。

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int x,y,m,n,l,k,s,g;
int exgcd(int a,int b,int& x,int& y){
	int d;
	if(b==0) x=1,y=0,d=a;
	else d=exgcd(b,a%b,y,x),y-=a/b*x;
	return d;
}
signed main(){
	cin>>x>>y>>m>>n>>l;
	if(m<n) swap(n,m),swap(x,y);
	g=exgcd(m-n,l,k,s);
	if((y-x)%g) cout<<"Impossible\n";
	else k*=(y-x)/g,g=l/g,k=(k%g+g)%g,cout<<k<<"\n";
	return 0;
}
posted @ 2025-08-03 17:28  Sinktank  阅读(19)  评论(0)    收藏  举报
★CLICK FOR MORE INFO★ TOP-BOTTOM-THEME
Enable/Disable Transition
Copyright © 2023 ~ 2025 Sinktank - 1328312655@qq.com
Illustration from 稲葉曇『リレイアウター/Relayouter/中继输出者』,by ぬくぬくにぎりめし.