WA后三个点 输出了-1
查看原帖
WA后三个点 输出了-1
389924
adolphshi楼主2023/2/11 12:45
#include<bits/stdc++.h>

using namespace std;

typedef __int128 ll;
ll k,a[1000010],r[1000010],x,y;
ll in()
{
	int x=0;int f=1;char ch=getchar();
	while (!isdigit(ch)){if (ch=='-')f=-1;ch=getchar();}
	while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
	x*=f;
	return x;
}
void out(ll x)
{
	if(x<0){
		putchar('-');
		x=-x;
	}
	if(x>9) out(x/10);
	putchar(x%10+'0');
}
ll exgcd(ll a,ll b)
{
	if(!b)
	{
		x=1;y=0;
		return a;
	}
	ll t=exgcd(b,a%b),p=x;
	x=y;
	y=p-a/b*y;
	return t;   
}
ll excrt(ll n)
{
	for(int i=1;i<n;i++)
	{
		ll A=r[i],B=r[i+1],C=(a[i+1]-a[i]);
		ll D=exgcd(A,B);
		C=(C%B+B)%B;
		if(C%D!=0) {return -1;}
		
		x=((x*C/D)%(B/D)+(B/D))%(B/D);
		r[i+1]=r[i]*r[i+1]/D;
		a[i+1]=x*r[i]+a[i];
		a[i+1]=(a[i+1]%r[i+1]+r[i+1])%r[i+1];
	}
	return (a[n]%r[n]+r[n])%r[n];
}
int main()
{
	k=in();
	for(int i=1;i<=k;i++)
	{
		r[i]=in();a[i]=in();
	}
	out(excrt(k));
	return 0;
}

2023/2/11 12:45
加载中...