50pts求调
查看原帖
50pts求调
1211668
WMY_楼主2025/7/29 17:46
#include <bits/stdc++.h>
using i64 = long long;
using u64 = unsigned long long;
#define dbg(...) fprintf(stderr, __VA_ARGS__)

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

void merge(i64 m1, i64 a1, i64 m2, i64 a2, i64& m, i64& a) {
	i64 s, t;
	i64 d = exgcd(m1, m2, s, t);
	m = m1 / d * m2;
	a = ((__int128)m1 * s % m * (a2 - a1) / d % m + a1) % m;
}

int main() {
	int n; 
	scanf("%d", &n);
	i64 m = 1, a = 0;
	for (int i = 1; i <= n; ++i) {
		int mi, ai;
		scanf("%d%d", &mi, &ai);
		merge(m, a, mi, ai, m, a);
	}
	printf("%lld\n", a); 
}

rt,哪里爆 long long 了

2025/7/29 17:46
加载中...