记录编号 423786 评测结果 AAAAAAAAAA
题目名称 韩信点兵 最终得分 100
用户昵称 GravatarBaDBoY 是否通过 通过
代码语言 C++ 运行时间 0.003 s
提交时间 2017-07-12 16:00:08 内存使用 0.31 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long n,m,p[15],a[15],M=1;
void ex_gcd(long long a,long long b,long long &x,long long &y){
    if(!b){
        x=1;y=0;
        return ;
	}
	ex_gcd(b,a%b,x,y);
	long long t=y;
	y=x-(a/b)*y;
	x=t;
}
long long CHINA(){
    long long ans=0;
    for(int i=1;i<=m;i++){
        long long mi=M/p[i];
        long long x,y;
        ex_gcd(mi,p[i],x,y);
        //cout<<mi<<" "<<p[i]<<" "<<x<<" "<<y<<endl;
        ans=(ans+a[i]*mi*x)%M;
	}
	return ans;
}
int main(){
	freopen("HanXin.in","r",stdin);
	freopen("HanXin.out","w",stdout);
    scanf("%lld%lld",&n,&m);
    for(int i=1;i<=m;i++){
        scanf("%lld%lld",&p[i],&a[i]);
        M=M*p[i];
	}
	//cout<<M<<endl;
	long long ans=CHINA();
	//cout<<ans<<endl;
	if(ans>n)
	    printf("-1");
	else{
	    long long tt=(n-ans)/M*M;
	    ans=n-ans-tt;
		printf("%lld",ans);
	}
	return 0;
}