您的位置:首页 > 其它

计蒜客 机器人的相遇问题(扩展欧几里得模板题)

2017-08-29 19:06 246 查看
题目链接:https://www.jisuanke.com/course/615/28212

题目大意:求解走多少步后,两个人再次相遇。

题目思路:将式子总结成ax+by=gcd(a,b)的形式,从而可用扩展欧几里得进行相应的求解。无解的情况是c/gcd(a,b)不为0

代码:

#include <bits/stdc++.h>
using namespace std;
#define ll long long

ll exgcd(ll a,ll b,ll &x,ll &y)
{
if(b==0){
x=1;
y=0;
return a;
}
ll ans=exgcd(b,a%b,x,y);
ll temp=x;
x=y;
y=temp-a/b*y;
return ans;
}

int main()
{
ll x,y,m,n,l;
cin>>x>>y>>m>>n>>l;
ll a=(m-n+l)%l;
ll b=(y-x+l)%l;
ll c=__gcd(a,l);
if(b%c!=0){
cout<<"Impossible"<<endl;
}
else{
a=a/c;b=b/c;
l/=c;
exgcd(a,l,x,y);
x=(x+l)%l;
x*=b;
x%=l;
cout<<x<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: