我自己测试都是通过的,为什么提交就说错误0%...
#include <stdio.h>
#include <stdint.h>
int64_t getGcd(int64_t a,int64_t b){
while(a%b){
int c=b;
b=a%b;
a=c;
}
return b;
}
void solveGcd(int64_t a,int64_t b,int64_t result[]){
if(b==1){
result[0]=0;
result[b]=1;
return;
}
solveGcd(b,a%b,result);
int64_t x=result[1];
int64_t y=result[0]-a/b*x;
result[0]=x;
result[1]=y;
return;
}
int64_t getAnswer(int64_t m[],int64_t r[],int64_t N){
int64_t M=m[0];
int64_t R=r[0];
for(int i=1;i<N;i++){
int64_t A=M;
int64_t B=-m[i];
int64_t C=r[i]-R;
int64_t gcd=getGcd(A,B);
if(C%gcd)
return -1;
int64_t result[2];
solveGcd(A/gcd,B/gcd,result);
result[0]=C/gcd*result[0];
R=result[0]*M+R;
M=M*m[i]/getGcd(M,m[i]);
while(R>0){
R-=M;
}
while(R<0){
R+=M;
}
}
return R;
}
int main(){
int64_t N;
int64_t m[1001],r[1001];
scanf("%lld",&N);
for(int i=0;i<N;i++){
scanf("%lld%lld",&m[i],&r[i]);
}
int64_t answer=getAnswer(m,r,N);
printf("%lld\n",answer);
}
/是解方程组的问题么?还是返回的值范围有问题呢?
gcc支持int64—t吗?你换long long试试
应该不是long long的问题
result[0]=C/gcd*result[0]; while(R>0){ R-=M; }这两个是不是有问题,第一个是不是少点东西,第二个让R最小,你这时让R为负值啊!!