题意:已知一个人的身体,智力和情感的循环周期,然后给出一个人身体,智力和情感的开始值,最后再给出一个固定时间,问在下一次三个共同达到峰值的时间在这个固定时间多长时间后。
题解:中国剩余定理板题,首先得了解拓展gcd,知道了这个后,再了解下求逆元传送门,在看下百科上的解释就懂了传送门,然后直接套拓展gcd的板子即可(尽量自己打)。
附上代码:
#include<iostream>
#include<cstdio>
using namespace std;
void ex_gcd(int a,int b,int &x,int &y)
{
if(b==0){
x=1;
y=0;
}else{
int x1,y1;
ex_gcd(b,a%b,x1,y1);
x=y1;
y=(x1-(a/b)*y1);
}
return ;
}
int main()
{
int m[4];
m[1]=23;m[2]=28;m[3]=33;
int M=1;
for(int i=1;i<=3;i++){
M*=m[i];
}
int ans[4];
for(int i=1;i<=3;i++){
int x1,y1;
int mi=M/m[i];
ex_gcd(mi,m[i],x1,y1);
while(x1<0){
x1+=m[i];
}
ans[i]=mi*x1;
}
int a,b,c,d;
int casen=0;
while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF){
if(a==-1&&b==-1&&c==-1&&d==-1){
break;
}
casen++;
int n=0;
n=(ans[1]*a+ans[2]*b+ans[3]*c-d+M)%M;
if(n==0){
printf("Case %d: the next triple peak occurs in %d days.\n",casen,M);
}else{
printf("Case %d: the next triple peak occurs in %d days.\n",casen,n);
}
}
return 0;
}