蒟蒻求助WA#15
查看原帖
蒟蒻求助WA#15
195331
Mine_KingCattleya楼主2020/12/20 21:13

RT.
经过测试好像前两个方程的时候就挂掉了/kk
也就是输入为

2
4 1
14857961273 13165372961

就输出了错误的答案。
有大佬帮忙调一调吗/kel

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
int n;
ll ans,mod,a[100005],m[100005];
ll gcd(ll _a,ll _b){return _b==0?_a:gcd(_b,_a%_b);}
ll lcm(ll _a,ll _b){return _a/gcd(_a,_b)*_b;}
void exgcd(ll _a,ll _b,ll &_x,ll &_y)
{
	if(_b==0)
	{
		_x=1,_y=0;
		return ;
	}
	exgcd(_b,_a%_b,_y,_x);
	_y-=(_a/_b)*_x;
	return ;
}
int main()
{
	freopen("P4777_15.in","r",stdin);
	freopen("P4777.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%lld%lld",&m[i],&a[i]);
	ans=a[1],mod=m[1];
	for(int i=2;i<=n;i++)
	{
		ll xx=0,yy=0;
		ll d=gcd(mod,m[i]);
		ll c=((a[i]-ans)%m[i]+m[i])%m[i];
		exgcd(mod,m[i],xx,yy);
		xx=xx*(c/d);
		xx=(xx%(m[i]/d)+m[i]/d)%(m[i]/d);
		ans=ans+xx*mod;
		mod=lcm(mod,m[i]);
		ans=(ans%mod+mod)%mod;
		//printf("%lld\n",ans);
	}
	printf("%lld\n",ans);
	return 0;
}
2020/12/20 21:13
加载中...