NC51076. 青蛙的约会
描述
输入描述
输入只包括一行5个整数x,y,m,n,L,其中,,。
输出描述
输出碰面所需要的跳跃次数,如果永远不可能碰面则输出一行"Impossible"
示例1
输入:
1 2 3 4 5
输出:
4
C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 408K, 提交时间: 2022-08-05 18:55:39
#include<bits/stdc++.h> using namespace std; #define int long long int exgcd(int a,int b,int &x,int &y) { if(b==0) { x=1;y=0; return a; } int gcd=exgcd(b,a%b,x,y); int tmp=x; x=y; y=tmp-a/b*y; return gcd; } signed main() { int x,y,m,n,l; int X,Y,gcd; cin>>x>>y>>m>>n>>l; int A=x-y,B=n-m; if(B<0) { B=-B; A=-A; } if(A%(gcd=exgcd(B,l,X,Y))!=0) cout<<"Impossible"<<endl; else cout<<( (long long)A/gcd * X % (l/gcd) + (l/gcd) ) % (l/gcd)<<endl; }
C++ 解法, 执行用时: 4ms, 内存消耗: 428K, 提交时间: 2022-05-31 15:06:03
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll x,y,m,n,l; ll A,B,C,D,X,Y; ll exgcd(ll a,ll b,ll &x,ll &y) { if(b==0) { x=1;y=0; return a; } ll g=exgcd(b,a%b,y,x); y-=a/b*x; return g; } int main() { cin>>x>>y>>m>>n>>l; A=n-m; B=l; C=x-y; D=exgcd(A,B,X,Y); if(C%D!=0) { printf("Impossible"); } else { X*=C/D; B/=D; if(B<0) B=-B;//B有可能为负 X=(X%B+B)%B; cout<<X; } }