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

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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章