bzoj 1477 青蛙的約會(exgcd模板)

zzk_233發表於2018-10-28

exgcd裸題。

兩個人之間有一個距離,兩人有一個速度差,設這個距離為c,速度差為a。而需要的次數就是x

那麼題意就是a*x\equiv c (mod \ l),這樣就是exgcd的標準形式啦。

至於距離和速度差一定要記得是追及問題,如果距離為a-b,那麼速度就是b的減a的,如果為負,就取模加模再取模,變為正的

含義上就是追了一圈。

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#define mode 999911658
using namespace std;
typedef long long ll;
ll x,y,xx,yy,n,m,l;
ll exgcd(ll a,ll b)
{
	if(b==0)
	{
		x=1,y=0;
		return a;
	}
	ll r=exgcd(b,a%b);
	ll t=x;
	x=y;
	y=t-a/b*x;
	return r;
}
int main()
{
	scanf("%lld%lld%lld%lld%lld",&xx,&yy,&m,&n,&l);
	ll aa=((n-m)%l+l)%l,cc=((xx-yy)%l+l)%l;	//追及問題。。 
	ll gg=exgcd(aa,l);
	if(cc%gg)
	{
		printf("Impossible");
		return 0;
	}
	cc/=gg;l/=gg; 
	x=(x%l+l)%l;
	x=x*cc%l;
	printf("%lld",(x%l+l)%l);
	return 0;
}

 

相關文章