生理周期[PKU1006]
2016-12-16 14:01
309 查看
生理周期
Description
人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相应的方面表现出色。例如,智力周期的高峰,人会思维敏捷,精力容易高度集中。因为三个周期的周长不同,所以通常三个周期的高峰不会落在同一天。对于每个人,我们想知道何时三个高峰落在同一天。对于每个周期,我们会给出从当前年份的第一天开始,到出现高峰的天数(不一定是第一次高峰出现的时间)。你的任务是给定一个从当年第一天开始数的天数,输出从给定时间开始(不包括给定时间)下一次三个高峰落在同一天的时间(距给定时间的天数)。例如:给定时间为10,下次出现三个高峰同天的时间是12,则输出2(注意这里不是3)。
Input
输入四个整数:p,e,i和d。p,e,i分别表示体力、情感和智力高峰出现的时间(时间从当年的第一天开始计算)。d是给定的时间,可能小于p,e,或i。所有给定时间是非负的并且小于365,所求的时间小于21252。
当p=e=i=d=-1时,输入数据结束。
Output
从给定时间起,下一次三个高峰同天的时间(距离给定时间的天数)。
采用以下格式:
Case1:thenexttriplepeakoccursin1234days.
注意:即使结果是1天,也使用复数形式“days”。
SampleInput
SampleOutput
ViewCode
TimeLimit:1000MS | MemoryLimit:10000K | |
TotalSubmissions:132195 | Accepted:42171 |
人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相应的方面表现出色。例如,智力周期的高峰,人会思维敏捷,精力容易高度集中。因为三个周期的周长不同,所以通常三个周期的高峰不会落在同一天。对于每个人,我们想知道何时三个高峰落在同一天。对于每个周期,我们会给出从当前年份的第一天开始,到出现高峰的天数(不一定是第一次高峰出现的时间)。你的任务是给定一个从当年第一天开始数的天数,输出从给定时间开始(不包括给定时间)下一次三个高峰落在同一天的时间(距给定时间的天数)。例如:给定时间为10,下次出现三个高峰同天的时间是12,则输出2(注意这里不是3)。
Input
输入四个整数:p,e,i和d。p,e,i分别表示体力、情感和智力高峰出现的时间(时间从当年的第一天开始计算)。d是给定的时间,可能小于p,e,或i。所有给定时间是非负的并且小于365,所求的时间小于21252。
当p=e=i=d=-1时,输入数据结束。
Output
从给定时间起,下一次三个高峰同天的时间(距离给定时间的天数)。
采用以下格式:
Case1:thenexttriplepeakoccursin1234days.
注意:即使结果是1天,也使用复数形式“days”。
SampleInput
0000 000100 52034325 4567 28310223320 20330120340 -1-1-1-1
SampleOutput
Case1:thenexttriplepeakoccursin21252days. Case2:thenexttriplepeakoccursin21152days. Case3:thenexttriplepeakoccursin19575days. Case4:thenexttriplepeakoccursin16994days. Case5:thenexttriplepeakoccursin8910days. Case6:thenexttriplepeakoccursin10789days. 可以很简单,直接数50000个就行。也可以更一般的用线性同余方程组。
#include<stdio.h> #include<algorithm> #include<math.h> usingnamespacestd; classCongruent_Linear_Equation_Group{ private: #defineMAX_GROUP_SIZE10 intgroupSize,dis; intA[MAX_GROUP_SIZE],M[MAX_GROUP_SIZE]; intgcd(inta,intb){ intk; while(b!=0){ k=b; b=a%b; a=k; } returna; } /********** *a,b=>x,y* *ax+by=gcd(a,b)* **********/ intextended_gcd(inta,intb,int&x,int&y){ intans,t; if(b==0){ x=1; y=0; returna; }else{ ans=extended_gcd(b,a%b,x,y); t=x; x=y; y=t-(a/b)*y; } returnans; } public: Congruent_Linear_Equation_Group(){ groupSize=0; } voidclear(){ groupSize=0; } voidaddEquation(inta,intm){ if(m==0){ return; } A[groupSize]=a; M[groupSize++]=m; } intgetSolution(){ intat=A[0],mt=M[0],ap,mp,x,y,z; for(inti=1;i<groupSize;i++){ ap=A[i]; mp=M[i]; if((at-ap)%gcd(mt,mp)!=0){ return-1; } /************* *x=mt*y+at* *x=mp*z+ap* *=>at-ap=mp*z-mt*y* *************/ extended_gcd(mp,-1*mt,z,y); //=>mp*z-mt*y=gcd(mp,-mt) z=z*(at-ap)/gcd(mp,-mt); x=mp*z+ap; mt=mt*mp/gcd(mt,mp); while(x<=0){ x+=mt; } at=x; } dis=mt; returnx; } intgetNextSolution(intx){ returnx+dis; } }; Congruent_Linear_Equation_Groupcc; intmain(){ inta,b,c,d,i=0; while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF){ if(a==-1&&b==-1&&c==-1&&d==-1){ break; } i++; cc.clear(); a%=23; b%=28; c%=33; cc.addEquation(a,23); cc.addEquation(b,28); cc.addEquation(c,33); intx=cc.getSolution(); if(x<=d){ x+=21252; } while(x-21252>d)x-=21252; printf("Case%d:thenexttriplepeakoccursin%ddays.\n",i,x-d); } return0; }
ViewCode
相关文章推荐
- PKU ACM 1006 生理周期
- POJ-1006生理周期(剩余定理)
- 生理周期(poj 1006)
- poj 1006 生理周期(中国剩余定理)
- PKU 1006 Biorhythms
- POJ 1006 生理周期(中国剩余定理)
- 生理周期POJ 1006
- Biorhythms 1006 PKU
- POJ 1006 生理周期(水)
- POJ 1006 生理周期
- poj-1006 生理周期(中国剩余定理)
- PKU POJ 1006 Biorhythms (中国剩余定理)
- pku 1006 中国剩余定理
- poj 1006 生理周期
- POJ 1006 生理周期(中国剩余定理/模拟)
- PKU1006
- poj1006——生理周期
- POJ 1006Biorhythms解题报告——生理周期——【PKU ACM】
- pku acm 1006
- PKU 1006