POJ 1006Biorhythms解题报告——生理周期——【PKU ACM】

这道题目的关键就是中国剩余定理

其次就是要考虑算出来的数据和给定天数的前后关系。
这里给出一些整理的测试数据,来自pku论坛:
0 4 50 
2 2 22 
123 128 133 1
123 128 133100 
0 1 21 
1 0 21 
1 2 01 
1 2 30 
117 58 227 
24 29 34 0         
24 29 34 1         
24 29 34 2         
0  0 0 0 
1 1 1 0
-1 -1 -1 -1
结果:368 21252 99 21252 16996 8119 13133 16998 212271 21252 21251 21252 1
#include<iostream> #include<vector> using namespace std; int main(){ int p,e,i,d,days; vector<int> nextTriple; while(cin>>p>>e>>i>>d){ if(p==-1&&e==-1&&i==-1&&d==-1) break; /*if(p>=23) p%=23; if(e>=28) e%=28; if(i>=33) i%=33;*/ days=(p*5544+e*14421+i*1288)%21252-d; //中国剩余定理 if(days==0) //如果恰好给定天数就是统一高峰时期 days=21252; else if(days<0) //如果同一高峰期在给定天数之前发生 days+=21252; nextTriple.push_back(days); } for(int i=0;i<nextTriple.size();++i) cout<<"Case "<<i+1<<": the next triple peak occurs in "<<nextTriple[i]<<" days."<<endl; return 0; } POJ 1006Biorhythms解题报告——生理周期——【PKU ACM】_第1张图片

你可能感兴趣的:(POJ 1006Biorhythms解题报告——生理周期——【PKU ACM】)