Acwing 222 青蛙的约会

题意:

两个青蛙在一条纬度线上不同的位置朝着同一方向跳下去,青蛙$A$的出发点坐标是$x$,青蛙$B$的出发点坐标是$y$,青蛙一次能跳$m$米,青蛙$B$一次能跳$n$米,两只青蛙跳一次所花的费的时间相同,问两只青蛙跳几次后相遇(纬线长度$L$)

思路:

假设两只青蛙跳$t$后相遇,$A$要追$B(y-x)$米,每跳一次$A$会追$B(m-n)$米,则$(m-n)t=(y-x)(mod  L)$即$(m-n)t+Lk=y-x$,解$t$,并求$t$的最小正整数解

Code:

复制代码
#include <cstdio>
#include <iostream>
#include <algorithm>

using namespace std;

typedef long long ll;

ll m, n, t, k, l, x, y;

ll exgcd(ll a, ll b, ll &x, ll &y){
    if(!b){
        x = 1, y = 0;
        return a;
    }
    ll d = exgcd(b, a % b, y, x);
    y -= a / b * x;
    return d;
}

int main(){
    cin >> x >> y >> m >> n >> l;
    m -= n, y -= x;
    if(m < 0){
        y = -y, m = -m;
    } 
    if(m == 0) cout << 0 << endl;
    else{
        ll g = exgcd(m, l, t, k);
        if(y % g){
            puts("Impossible");
        }
        else{
            l /= g;
            t = t * (y / g);
            t = (t % l + l) % l;
            cout << t << endl;
        }
    }
    
    return 0;
    
}
复制代码

 

posted @   君顾  阅读(116)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示