Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 125197 | Accepted: 39528 |
Description
Input
Output
Sample Input
0 0 0 0
0 0 0 100
5 20 34 325
4 5 6 7
283 102 23 320
203 301 203 40
-1 -1 -1 -1
Sample Output
Case 1: the next triple peak occurs in 21252 days.
Case 2: the next triple peak occurs in 21152 days.
Case 3: the next triple peak occurs in 19575 days.
Case 4: the next triple peak occurs in 16994 days.
Case 5: the next triple peak occurs in 8910 days.
Case 6: the next triple peak occurs in 10789 days.
Source
Translator
1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cmath> 5 #include<algorithm> 6 #include<cstring> 7 using namespace std; 8 int a[10],m[10],tot,now,M; 9 inline void exgcd(int a,int b,int &d,int &x,int &y){ 10 if(b==0){ 11 x=1; y=0; d=a; 12 return ; 13 } 14 exgcd(b,a%b,d,y,x); y-=x*(a/b); 15 } 16 inline int China(int r){ 17 M=1; 18 int Mi,d,x0=0,y0=0,ans=0; 19 for(int i=1;i<=r;i++) M*=m[i]; 20 for(int i=1;i<=r;i++){ 21 Mi=M/m[i]; 22 exgcd(Mi,m[i],d,x0,y0);//x0是Mi的乘法逆元 23 ans=(ans+Mi*x0*a[i])%M; 24 } 25 ans=(ans+M)%M; 26 return ans; 27 } 28 int main(){ 29 m[1]=23; m[2]=28; m[3]=33; 30 while(scanf("%d%d%d%d",&a[1],&a[2],&a[3],&now)&&a[1]!=-1){ 31 tot++; 32 if(a[1]==a[2]&&a[2]==a[3]&&a[3]==0){ 33 printf("Case %d: the next triple peak occurs in %d days.\n",tot,21252-now); 34 continue; 35 } 36 int ANS=China(3); 37 while(ANS<=now) ANS+=M; 38 printf("Case %d: the next triple peak occurs in %d days.\n",tot,ANS-now); 39 } 40 return 0; 41 }
原文:http://www.cnblogs.com/CXCXCXC/p/5223131.html