[P1516]青蛙的约会 (扩展欧几里得/中国剩余定理?)

每日做智推~

一看就是一道数学题。

再看是一道公约数的题目。

标签是中国孙子定理。

题解是扩展欧几里得

(笑)

一开始没看数据范围 只有50分

开一个longlong就可以了

#include<cstdio>
#define ll long long
using namespace std;
ll x, y, m, n, l;
ll ans, x1, y1;
ll exgcd(ll a, ll b, ll &x1, ll &y1)
{
    if (!b)
    {
        x1 = 1;
        y1 = 0;
        return a;
    }
    ans = exgcd(b, a%b, x1, y1);
    ll t = x1; x1 = y1; y1 = t - a / b * y1;
    return ans;
}
int main()
{
    scanf("%lld%lld%lld%lld%lld", &x, &y, &m, &n, &l);
    ll b = n - m, a = x - y;
    if (b < 0)
    {
        b = -b;
        a = -a;
    }
    exgcd(b, l, x1, y1);
    if (a%ans != 0) puts("Impossible");
    else printf("%lld", ((x1*(a / ans)) % (l / ans) + (l / ans)) % (l / ans));
    return 0;
}

 

posted @ 2018-10-20 14:25  lincold  阅读(220)  评论(1编辑  收藏  举报