P4777 24pts 求调!
查看原帖
P4777 24pts 求调!
536439
YONIC楼主2022/5/10 20:59
#include<bits/stdc++.h>
#define int long long
#define M5 (int)(1e5+3)
using namespace std;
struct equation{int r,mod;};
queue<equation>Q;
int n;
int gcd(int u,int v){return v?gcd(v,u%v):u;}
int lcm(int u,int v){return u/gcd(u,v)*v;}
void exgcd(int a,int b,int&x,int&y){
	if(!b){
		x=1;
		y=0;
		return;
	}
	exgcd(b,a%b,x,y);
	int k=x;
	x=y;
	y=k-y*(a/b);
}
void excrt(){
	while(Q.size()>1){
		equation e1=Q.front();
		Q.pop();
		equation e2=Q.front();
		Q.pop();
		int m1=e1.mod,m2=e2.mod,r1=e1.r,r2=e2.r;
		int d=gcd(m1,m2),p1=m1/gcd(m1,m2),p2=m2/gcd(m1,m2);
		int g1,g2;
		exgcd(p1,p2,g1,g2);
		equation e;
		e.mod=lcm(m1,m2);
		e.r=r1+(r2-r1)/d*g1*m1;
        e.r%=e.mod;
		Q.push(e);
	}
}
signed main(){
	scanf("%lld",&n);
	for(int i=1;i<=n;++i){
        equation e;
		scanf("%lld%lld",&e.mod,&e.r);
		Q.push(e);
	}
	excrt();
	printf("%lld",Q.front().r);
	return 0;
}
2022/5/10 20:59
加载中...