90pts,WAon#2,悬关求调(讨论区我翻着改了一遍没用)
查看原帖
90pts,WAon#2,悬关求调(讨论区我翻着改了一遍没用)
1070708
Caged_Bird楼主2024/5/20 23:42
#include<bits/stdc++.h>
using namespace std;
__int128 n,a[100005],b[100005],c[100005],m[100005];
__int128 mul=1,ans;
__int128 x,y;
inline void input(__int128 &s){
    s=0;
    char c=' ';
    while(c>'9'||c<'0') c=getchar();
    while(c>='0'&&c<='9')
    {
        s=s*10+c-'0';
        c=getchar();
    }
}
inline void output(__int128 x){
    if(x>9)output(x/10);
    putchar(x%10+'0');
}
void exgcd(__int128 a,__int128 b){
	if(b==0){
		x=1;
		y=0;
		return;
	}
	exgcd(b,a%b);
	__int128 t=x;
	x=y;
	y=t-a/b*y;
	return;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	input(n);
	for(int i=1;i<=n;i++){
		input(b[i]);
	}	
	for(int i=1;i<=n;i++){
		input(a[i]);
		mul*=a[i];
		b[i]=(b[i]%a[i]+a[i])%a[i];
	}
	for(int i=1;i<=n;i++){
		m[i]=mul/a[i];
		exgcd(m[i],a[i]);
		x=(x%a[i]+a[i])%a[i];	
		c[i]=m[i]*x;
	}
	for(int i=1;i<=n;i++){
		ans+=b[i]*c[i];
		ans%=mul;
	}
	output(ans);
	return 0;
}

2024/5/20 23:42
加载中...