标签:
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 118302 | Accepted: 37136 |
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.
思路:
易列出同余方程组:
X ≡ p(mod 23)
X ≡ e(mod 28)
X ≡ i (mod 33)
因为23,28,33互素,所以用中国剩余定理结论:解为sigma(ri*Mi*Mi-1)
//148K 47MS C++ 716B #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; int r[4]; int m[4]={0,23,28,33}; int M=m[1]*m[2]*m[3]; int x,y; int e_gcd(int a,int b,int&x,int &y) { int ans; if(b==0) ans=a,x=1,y=0; else ans=e_gcd(b,a%b,y,x),y-=(a/b)*x; return ans; } int main() { int d; int cas=0; while(scanf("%d%d%d%d",&r[1],&r[2],&r[3],&d),~d) { cas++; int ans=0; for(int i=1;i<=3;i++) { int a=M/m[i]; e_gcd(a,m[i],x,y); ans+=a*x*r[i]; } printf("Case %d: the next triple peak occurs in %d days.\n",cas,((ans-d)%M+M-1)%M+1); } return 0; }
标签:
原文地址:http://blog.csdn.net/kalilili/article/details/44938069