求助exCRT 18pts
查看原帖
求助exCRT 18pts
483928
Z1qqurat楼主2023/2/25 08:50

感觉没有什么错的,但是只有18pts,球球了/kel

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 5;
int n, r1, r2, m1, m2;

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

int gcd(int a, int b) {
    if(!b) return a;
    return gcd(b, a % b);
}

void merge() {
    //I I I hate you
    int d = gcd(m1, m2); int p1 = m1 / d, p2 = m2 / d, l = m1 * m2 / d;
    int c = (r2 - r1) / d, x, y;
    //cout << p1 << ' ' << p2 << ' ' << d << ' ' << l << ' ' << c << "\n";
    exgcd(p1, p2, x, y);
    //cout << x << ' ' << y << "\n";
    int xx = (r1 + c * ((x + l) % l) % l * m1 % l + l) % l;
    m1 = l, r1 = xx;
    //cout << xx << "\n";
    return ;
}

signed main() {
    scanf("%lld", &n);
    for (int i = 1; i <= n; ++i) {
        int e, f; scanf("%lld%lld", &e, &f);
        if(i == 1) m1 = e, r1 = f;
        else {
            m2 = e, r2 = f;
            merge();
        }
    }
    printf("%lld\n", r1);
    return 0;
}
2023/2/25 08:50
加载中...