菜鸡94pts求助
查看原帖
菜鸡94pts求助
174897
zjrdmd楼主2020/8/20 22:05

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;
}

代码照着一本通打的

2020/8/20 22:05
加载中...