可以推出来 (x+va*t)-(y+vb*t)=p*l 然后化成(l*p+(b-a)*t+l*p=x-y
然后有一个我也不晓得叫什么的定理 a*x+b*y=c 如果gcd(a,b)不能整除c 那无解
然后还有一个我还是不晓得名字的东西 先求出方程a*x+b*y=c的一个解x0 y0 然后通解为 x=x0-b*t y=y0+a*t t为整数
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 ll xa,xb,va,vb,l; 5 6 template<class t>void rd(t &x) 7 { 8 x=0;int w=0;char ch=0; 9 while(!isdigit(ch)) w|=ch=='-',ch=getchar(); 10 while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar(); 11 x=w?-x:x; 12 } 13 14 ll exgcd(ll a,ll b,ll &x,ll &y) 15 { 16 if(!b) {x=1,y=0;return a;} 17 ll r=exgcd(b,a%b,x,y); 18 ll t=x;x=y,y=t-a/b*y; 19 return r; 20 } 21 22 int main() 23 { 24 rd(xa),rd(xb),rd(va),rd(vb),rd(l); 25 int b=vb-va,a=xa-xb; 26 if(b<0) b=-b,a=-a; 27 if(va==vb) printf("Impossible"),exit(0);//速度一样 28 ll x,y,gcd=exgcd(b,l,x,y); 29 if((xb-xa)%gcd) printf("Impossible"),exit(0); 30 printf("%lld",(x*(a/gcd)%(l/gcd)+l/gcd)%(l/gcd)); 31 return 0; 32 }
嘿嘿嘿