注意时间限制 30 分
#include<iostream> #include<string.h> #include<math.h> #include<algorithm> #include<stdio.h> using namespace std; void exgcd(long long aa,long long bb,long long&x,long long&y) { if(bb==0) {x=1;y=0;} else { exgcd(bb,aa%bb,y,x); y=y-(aa/bb)*x; } } long long gcd(long long a,long long b) { if(b==0) return a; else return (b,a%b); } int main() { int i,j; long long a,c,l,xx,yy,x,y,d,n,m; cin>>xx>>yy>>m>>n>>l; a=m-n;c=yy-xx; if(a<0) {a=-a;c=-c;} d=gcd(a,l); if(c%d==0) { exgcd(a,l,x,y); cout<<((x*(c/d))%(l/d)+(l/d))%(l/d)<<endl; } else cout<<"Impossible"<<endl; return 0; }
100 分
#include<iostream> #include<string.h> #include<math.h> #include<algorithm> #include<stdio.h> using namespace std; int exgcd(long long aa,long long bb,long long&x,long long&y) { int r; if(bb==0) {x=1;y=0;return aa;} else { r=exgcd(bb,aa%bb,y,x); y=y-(aa/bb)*x; return r; } } int main() { int i,j; long long a,c,l,xx,yy,x,y,d,n,m; cin>>xx>>yy>>m>>n>>l; a=m-n;c=yy-xx; if(a<0) {a=-a;c=-c;} d=exgcd(a,l,x,y); if(c%d==0) cout<<( x*(c/d)%(l/d)+(l/d))%(l/d)<<endl; else cout<<"Impossible"<<endl; return 0; }