标签:algorithm 正整数 int str namespace tchar printf gcd china
【题目描述】
1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 #include<cmath> 6 #include<ctime> 7 #include<algorithm> 8 using namespace std; 9 int T,n,s,M,ans,flag,a[15],m[15]; 10 inline int read() 11 { 12 int x=0,f=1; char ch=getchar(); 13 while(!isdigit(ch)) {if(ch==‘-‘) f=-1; ch=getchar();} 14 while(isdigit(ch)) {x=x*10+ch-‘0‘; ch=getchar();} 15 return x*f; 16 } 17 void exgcd(int a,int b,int &g,int &x,int &y) 18 { 19 if(b==0) {x=1; y=0; g=a; return;} 20 exgcd(b,a%b,g,x,y); 21 int t=x;x=y;y=t-a/b*y; 22 } 23 void China() 24 { 25 int A=a[1],k,y; M=m[1]; 26 for(int i=2;i<=n;i++) 27 { 28 int da=a[i]-A,g; 29 exgcd(M,m[i],g,k,y); 30 if(da%g) {flag=1; return;} 31 int t=m[i]/g; 32 k*=da/g; 33 k=(k+t)%t; 34 A+=k*M; 35 M=M*m[i]/g; 36 A=(A+M)%M; 37 } 38 ans=A; 39 } 40 int main() 41 { 42 freopen("cin.in","r",stdin); 43 freopen("cout.out","w",stdout); 44 T=read(); 45 while(T--) 46 { 47 s=read(); n=read(); flag=0; 48 for(int i=1;i<=n;i++) m[i]=read(); 49 for(int i=1;i<=n;i++) a[i]=read(); 50 China(); 51 if(ans>s||flag) {printf("0\n"); continue;} 52 int sum=(s-ans)/M+1; 53 if(ans==0) sum--; 54 printf("%d\n",sum); 55 } 56 return 0; 57 }
标签:algorithm 正整数 int str namespace tchar printf gcd china
原文地址:http://www.cnblogs.com/chty/p/6024691.html