Rt,找不到哪里挂了
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <stdlib.h>
#include <stack>
#include <queue>
#define ri register int
#define int long long
inline int read() {
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return x*f;
}
int n,g,x,y;
void exgcd(int a,int b,int &x,int &y){
if(b==0){
x=1,y=0,g=a;
return;
}
exgcd(b,a%b,x,y);
int x2=x,y2=y;
x=y2,y=x2-y2*(a/b);
return;
}
int mul(int ai,int bi,int p)
{
int ansp=0,x=ai;
while(bi!=0){
if(bi&1)ansp=(ansp+x)%p;
x=(x+x)%p;
bi>>=1;
}
return (ansp%p+p)%p;
}
signed main(void){
n=read();
int a=read(),b=read();
int lcm=a,now=b,fail=0,k=0;
for(ri i=2;i<=n;i++){
a=read(),b=read();
b=(b-now%a+a)%a;
exgcd(lcm,a,x,y);
if(b%g==0)k=mul(x,b/g,a);
else fail=1;
now+=k*lcm;
lcm=lcm/g*a;
now=(now%lcm+lcm)%lcm;
}
if(fail)printf("-1");
else printf("%lld",now);
return 0;
}
代码照着一本通打的