Unaccepted 100pts求调
查看原帖
Unaccepted 100pts求调
376679
初星逝者楼主2024/7/21 16:17

rt,代码直接按照excrt写的(虽然说那题也没过)

#include <bits/stdc++.h>
using namespace std;
#define ll long long

int n;
ll a[100005],b[100005];

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

ll lcm(ll a,ll b){
	return a/__gcd(a,b)*b;
}

signed main(){
	cin >> n;
	for(int i=1;i<=n;i++){
		cin >> a[i] >> b[i];
	}
	for(int i=2;i<=n;i++){
		if(b[i]<b[i-1]){
			swap(a[i],a[i-1]);
			swap(b[i],b[i-1]);
		}
		ll p=b[i]-b[i-1],x=0,y=0;
		ll gcd=__gcd(a[i],a[i-1]);
		Exgcd(a[i-1],a[i],x,y);
		ll nmod=lcm(a[i],a[i-1]);
		ll o=(b[i-1]+(b[i]-b[i-1])/gcd%nmod*x%nmod*(a[i-1])%nmod)%nmod;
		a[i]=nmod;
		b[i]=(o%nmod+nmod)%nmod;
	}
//	cout<<a[n]<<" "<<b[n]<<endl;
	cout<<b[n]%a[n]<<endl;
	return 0;
}
2024/7/21 16:17
加载中...