一看这题目名字就想起了——βίος

1. 题目

传送门= ̄ω ̄=

2. 题解

中国剩余定理模板题(甚至还简单些)(也许蒟蒻窝只做得动这种题了)
设下一次发生的时间是 s
可以得到:
$$s\ mod\ 23=p$$
$$s\ mod\ 28=e$$
$$s\ mod\ 33=i$$

设:
$$s=x\times p+y\times e+z\times i$$

由中国剩余定理可知:
$$x\ mod\ 28\times 33=0,x\ mod\ 23=1$$
$$y\ mod\ 23\times 33=0,y\ mod\ 28=1$$
$$z\ mod\ 23\times 28=0,z\ mod\ 33=1$$

所以:
$$x=924\times a,924\times a\ mod\ 23=1,a=924^{23-2}\ mod\ 23=6,x=5544$$
$$y=759\times b,759\times b\ mod\ 28=1,b=759^{28-2}\ mod\ 28=19,y=14421$$
$$z=644\times c,644\times c\ mod\ 33=1,c=644^{33-2}\ mod\ 33=2,z=1288$$

所以下一次发生的时间就是:$5544\times p+14421\times e+1288\times i-d$,但由于可能会得出负数,要把答案先加上 lcm(23,28,33)=21252,再模一下 21252
因为可能当天就是三个周期装在一起的时间,如果这样得到的答案=0,错误,所以要特判,这种情况输出 21252 即可

代码:

#include <bits/stdc++.h>
using namespace std;
int t,a,b,c,d,ans;
int main()
{
    scanf("%d",&t);
    while(scanf("%d%d%d%d",&a,&b,&c,&d),a!=-1|b!=-1|c!=-1|d!=-1)
    {
        ans=(((0-d+5544*a+14421*b+1288*c)%21252)+21252)%21252;
        if(!ans>d)ans+=21252;
        printf("Case %d: the next triple peak occurs in %d days.\n",t++,ans);
    }
    return 0;
}
分类: 文章

XZYQvQ

炒鸡辣鸡的制杖蒟蒻一枚QvQ

0 条评论

发表回复

Avatar placeholder

您的邮箱地址不会被公开。 必填项已用 * 标注