倒数第三个点TLE,最后两个点Wrong,求帮助
查看原帖
倒数第三个点TLE,最后两个点Wrong,求帮助
233198
starseven楼主2020/4/30 15:43
#include<cstdio>
#include<iostream>
#include<cmath>
#define ri register int
#define Starseven main
#define ll long long
using namespace std;
const int N=1e5+20;
int n;
ll a[N],b[N],M;

inline ll Multi(ll x,ll y,ll p){
	ll re=0;
	while(y){
		if(y&1) re=(re+x)%p;
		y>>=1;
		x=(x*2)%p;
	}
	return re%p;
}

int Get_exgcd(ll m,ll n,ll &x,ll &y){
	if(n==0){
		x=1,y=0;return m;
	}
	ll judge=Get_exgcd(n,m%n,x,y);
	ll t=x;x=y;y=t-m/n*y;
	return judge;
}

int Starseven(void){
	cin>>n;
	for(ri i=1;i<=n;i++) cin>>a[i]>>b[i]; 
	ll ans=b[1],m=a[1];
	for(ri i=2;i<=n;i++){
		ll n=a[i],d,e;
		ll c=(b[i]-ans%a[i]+a[i])%a[i];
		ll judge=Get_exgcd(m,n,d,e);
		if(c%judge!=0) return 0;
		ll mx=n/judge;
		ll dx=(Multi(d,c/judge,mx)+mx)%(mx);
		dx=Multi(dx,m,m*mx);
		ans+=dx;
		m*=mx;
		ans=(ans%m+m)%m;;
	}
	cout<<ans<<endl;
	return 0;
}
2020/4/30 15:43
加载中...