36分求调,谢谢!
查看原帖
36分求调,谢谢!
754444
tamamocross楼主2023/7/18 00:42
#include<iostream>
const int Max=1e5+1;
using namespace std;
int n;
long long a[Max],b[Max];
long long exgcd(long long a,long long b,long long &x,long long &y){
	if(b==0){
		x=1;y=0;return a;
	}
	long long d=exgcd(b,a%b,x,y);
	long long z=y;y=x-a/b*y;x=z;
	return d;
}
int excrt(){
	for(int i=2;i<=n;i++){
		long long x,y;
		long long d=exgcd(a[i-1],a[i],x,y);
		if((b[i]-b[i-1])%d!=0){
			return -1;
		}
		long long c=(b[i]-b[i-1])/d;
		x*=c;
		x=(x%(a[i]/d)+a[i]/d)%(a[i]/d);
		b[i]=b[i-1]+x*a[i-1];
		a[i]=a[i]*a[i-1]/d;
	}
	return (b[n]%a[n]+a[n])%a[n];
}

int main(){
	cin>>n;
	long long x,y;
	for(int i=1;i<=n;i++){
		cin>>a[i]>>b[i];
	}
	int ans=excrt();
	if(ans==-1){
		cout<<"no solution";
	}else{
		cout<<ans;
	}
} 
2023/7/18 00:42
加载中...