只有24分求调!!!(不知道问题)
查看原帖
只有24分求调!!!(不知道问题)
457492
ysl_wf楼主2024/3/8 19:04
#include<bits/stdc++.h>
using namespace std;
typedef long long lt;

const int N = 1e5 + 10;
int n;
lt w[N], b[N], ans;// a b

lt GCD(lt x, lt y){ return y == 0 ? x : GCD(y, x % y); }

lt lcm(lt x, lt y){ return x * y / GCD(x, y); }

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

int main(){
    scanf("%d", &n);
    for(int i = 1; i <= n; i++)
        scanf("%lld%lld", &w[i], &b[i]);
    for(int i = 2; i <= n; i++){ //每次利用: w[i-1], w[i], b[i], b[i-1]
        // if((b[i] - b[i-1]) % GCD(w[i-1], w[i])) break;//表示无解
        lt d = GCD(w[i-1], w[i]);
        lt p1 = w[i-1]/d, p2 = w[i]/d;
        lt x, y;
        exgcd(p1, p2, x, y);
        lt _x = b[i-1] + (b[i] - b[i-1])/d*x*w[i-1];
        b[i] = _x, w[i] = lcm(w[i], w[i-1]);
        b[i] = (b[i]%w[i] + w[i]) % w[i];
        printf("%d %lld\n", i, b[i]);
    }
    printf("%lld", (long long)b[n] % w[n]);
    return 0;
}
2024/3/8 19:04
加载中...