记录编号 281389 评测结果 AAAAAAAAAA
题目名称 韩信点兵 最终得分 100
用户昵称 Gravatar安呐一条小咸鱼。 是否通过 通过
代码语言 C++ 运行时间 0.003 s
提交时间 2016-07-11 18:32:48 内存使用 0.31 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
typedef  long long LL;
LL people,n,su[2000],yu[2000],x,y,c,d,M=1,ans=0,em;
LL gcd(LL a,LL b,LL &x,LL &y,LL&d)
{
	if(b==0){d=a,x=1,y=0;}
	else{gcd(b,a%b,y,x,d);y-=x*(a/b);}
}
int main()
{
	freopen("HanXin.in","r",stdin);freopen("HanXin.out","w",stdout);
	cin>>people>>n;
	for(LL i=0;i<n;i++){
	cin>>su[i]>>yu[i];
		M*=su[i];
	}
	for(LL i=0;i<n;i++){
		em=M/su[i];
		x=0,y=0,d=0,c=1;
		gcd(em,su[i],x,y,d);
		ans+=( (x*em*yu[i])+M )%M;
	}
	ans=(ans+M )%M;
	if(ans>people){
		puts("-1");return 0;}
	while(ans<people)ans+=M;
	ans-=M;
	cout<<people-ans;
	return 0;
}
/*
1000000 4
3 0
2 0
5 4
7 0   ans=106;
100000000 5
1291 960
2039 252
337 311
389 277
2 1
 ans= -1;
1500 3
3 2
5 4
7 6
ans=31;
1000000000000 3
9871 1528
162731 5773
617 222
ans=443683241159;
*/