题目描述:

人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相应的方面表现出色。例如,智力周期的高峰,人会思维敏捷,精力容易高度集中。因为三个周期的周长不同,所以通常三个周期的高峰不会落在同一天。对于每个人,我们想知道何时三个高峰落在同一天。对于每个周期,我们会给出从当前年份的第一天开始,到出现高峰的天数(不一定是第一次高峰出现的时间)。你的任务是给定一个从当年第一天开始数的天数,输出从给定时间开始(不包括给定时间)下一次三个高峰落在同一天的时间(距给定时间的天数)。例如:给定时间为10,下次出现三个高峰同天的时间是12,则输出2(注意这里不是3)。

输入格式:

输入四个整数:p, e, i和d。 p, e, i分别表示体力、情感和智力高峰出现的时间(时间从当年的第一天开始计算)。d 是给定的时间,可能小于p, e, 或 i。

当p = e = i = d = -1时,输入数据结束。

输出格式:

从给定时间起,下一次三个高峰同天的时间(距离给定时间的天数)。

采用以下格式:

Case 1: the next triple peak occurs in 1234 days.

注意:即使结果是1天,也使用复数形式“days”。

样例输入:

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

样例输出:

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.

【提示】

数据范围与提示:

所有给定时间是非负的并且小于 365,所求的时间小于 21252。


因为23、28、33互质,所以我们很容易想到,这道题的中心思想就是“中国剩余定理”,只不过稍稍增加了一点细节罢了。因为要求输出的时间是距离给定时间d的天数,所以不能单纯的解同余方程组。

但是,我要告诉你,这道题目真的肥肠简单,就算是直接解同余方程组再暴力循环都能过!!!先放上我暴力的代码

 1 #include<bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 ll m=23*28*33,a[4],b,n;
 5 int mm[4];
 6 int read()
 7 {
 8     int x=0,f=1;
 9     char ch=getchar();
10     while(ch<'0'||ch>'9')
11     {
12         if(ch=='-') f=-1;
13         ch=getchar();
14     }
15     while(ch>='0'&&ch<='9')
16     {
17         x=x*10+ch-'0';
18         ch=getchar();
19     }
20     return x*f;
21 }
22 void write(int x)
23 {
24     if(x<0)
25     {
26         putchar('-');
27         x=-x;
28     }
29     if(x>9) write(x/10);
30     putchar(x%10+'0');
31 }
32 void exgcd(ll a,ll b,ll &d,ll &x,ll &y)
33 {
34     if(b==0)
35     {
36         d=a;
37         x=1;
38         y=0;
39     }
40     else
41     {
42         exgcd(b,a%b,d,x,y);
43         int t=x;
44         x=y;
45         y=t-a/b*y;
46     }
47 }
48 int main()
49 {
50     mm[1]=23;mm[2]=28;mm[3]=33;int k=0;
51     while(scanf("%lld%lld%lld%lld",&a[1],&a[2],&a[3],&b)!=EOF)
52     {
53         k++;ll ans=0;
54         if(a[1]==-1)break;
55         for(int i=1;i<=3;i++)
56         {
57             ll d,x,y,mi=m/mm[i];
58             exgcd(mi,mm[i],d,x,y);
59             ans=(ans+mi*x*a[i])%m;
60         }
61         ll xx=(ans+m)%m;
62         if(xx>b)n=xx-b;
63         else if(ans<=b)
64         {
65             for(int i=1;;i++)
66             {
67                 if(ans+i*m>b)
68                 {
69                     n=ans+i*m-b;
70                     break;
71                 }
72             }
73         }
74         else
75         {
76             for(int i=-1;;i--)
77             {
78                 if(ans+i*m<b)
79                 {
80                     n=ans+(i+1)*m-b;
81                     break;
82                 }
83             }
84         }
85         printf("Case %d: the next triple peak occurs in %lld days.\n",k,n);
86     }
87     return 0;
88 }

蒟蒻只会暴力

但是做完以后我瞟了一眼隔壁的肖玉梅童鞋的代码,突然发现自己好弱智吖,这么简单的题我tm居然还暴力...关键是这道题已经给出了数据范围,所以根本没必要循环的好伐(´-ι_-`)论数据范围和审题的重要性!!!

 1 #include<bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 const ll lcm=21252;//21252=23*28*33
 5 ll m[4],a[4],d;
 6 void exgcd(ll a,ll b,ll &gcd,ll &x,ll &y)
 7 {
 8     if(!b)
 9     {
10         gcd=a;
11         x=1;
12         y=0;
13     }
14     else
15     {
16         exgcd(b,a%b,gcd,x,y);
17         ll t=x;x=y;y=t-a/b*y;
18     }
19 }
20 int main()
21 {
22     int cnt=0;
23     m[1]=23;m[2]=28;m[3]=33;
24     while(~scanf("%lld%lld%lld%lld",&a[1],&a[2],&a[3],&d))
25     {
26         cnt++;
27         ll ans=0,Mi,gcd,x,y;
28         if(a[1]==0&&a[2]==0&&a[3]==0&&d==0)//数据最大不超过21252 ,所以可以直接输出
29         {
30             printf("Case %d: the next triple peak occurs in %lld days.\n",cnt,lcm);
31             continue;
32         }
33         if(a[1]==-1)//写一个就够了,没必要全写出来,因为题目已说明所有给定时间是非负的
34         break;
35         for(int i=1;i<=3;i++)//中国剩余定理的应用
36         {
37             Mi=lcm/m[i];
38             exgcd(Mi,m[i],gcd,x,y);
39             ans=((ans+Mi*x*a[i])%lcm+lcm)%lcm;
40         }
41         ans=((ans%lcm)-(d%lcm)+lcm)%lcm;
42         if(ans<=0) ans+=lcm;//若小于0,直接加上21252,还是因为数据最大不超过21252
43         printf("Case %d: the next triple peak occurs in %lld days.\n",cnt,ans);
44     }
45     return 0;
46 }

这才是本题正确的打开方式

转载于:https://www.cnblogs.com/ljy-endl/p/11407681.html

Biorhythms(信息学奥赛一本通 1639)相关推荐

  1. 信息学奥赛一本通_长乐一中老师演绎“奥赛传奇”

    董永建(右一)在课堂上. 台海网5月14日讯 据福州晚报报道,长乐一中有一位"传奇"老师--15年来,他辅导的学生在全国高中生信息学奥赛中获金牌3人次.银牌3人次.铜牌5人次:在全 ...

  2. 信息学奥赛一本通 提高篇 第5章 矩阵乘法

    例1 矩阵AXB 信息学奥赛一本通(C++版)在线评测系统 [矩阵乘法]矩阵A×B_Uletay-CSDN博客 矩阵乘法--矩阵A×B_vina的博客-CSDN博客 一本通1641[例 1]矩阵 A× ...

  3. 《信息学奥赛一本通提高篇》第6章 组合数学

    例1 计算系数(NOIP2011提高) 信息学奥赛一本通(C++版)在线评测系统 NOIP2011计算系数_nanhan27的博客-CSDN博客 「NOIP2011」 计算系数 - 组合数_TbYan ...

  4. 《信息学奥赛一本通 提高篇》

    提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1章 贪心算法_青少年趣味编程-CSDN博客 提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1 ...

  5. 信息学奥赛一本通 提高篇 第一部分 基础算法 第2章 二分与三分

    信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分 信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分_mrcrack的博客-CSDN博客_信息学奥赛一本通 ...

  6. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  7. 信息学奥赛一本通 1080:余数相同问题 2022.1.29 AC

    http://ybt.ssoier.cn:8088/show_source.php?runid=14630195 /* 信息学奥赛一本通 1080:余数相同问题 2022.1.29 AC http:/ ...

  8. 信息学奥赛一本通 提高篇 第六部分 数学基础 第1章 快速幂

    信息学奥赛一本通 提高篇 第六部分 数学基础 第1章 快速幂 https://blog.csdn.net/mrcrack/article/details/82846727 快速幂取模算法如何实现? h ...

  9. 【例1】 0/1背包《信息学奥赛一本通》【解法一】 02

    /* [例1] 0/1背包<信息学奥赛一本通>[解法一] 02 http://ybt.ssoier.cn:8088/problem_show.php?pid=1267 */ #includ ...

最新文章

  1. BASE64 编码和解码
  2. POJ - 2492 种类并查集
  3. opencv学习笔记3:像素处理
  4. boost::histogram::detail::tuple_slice用法的测试程序
  5. 贝叶斯分类器与贝叶斯网络
  6. 经纬度距离计算小工具_造价算量慢?70个造价史上最实用小工具和计算表格,速领...
  7. Android Multimedia框架总结(二十七)MediaCodec回顾
  8. 数据操作(基于MXNET框架)
  9. 如何成为Java高级工程师?
  10. Foobar2000之处理无损音乐格式
  11. 墨卡托投影、高斯-克吕格投影、UTM投影及我国分带方法
  12. 智慧园区中心服务平台建议方案
  13. Spark源码之存储体系简介及缓存cache源码流程图
  14. python求斜边上的高_关于如何求直角三角形斜边上的高
  15. python转换excel 列号 为数字 数字转为列号
  16. 【Ubuntu 20.04 安装中文输入法 谷歌拼音】
  17. Mysql报错130_Mysql报错Forcing close of thread 139 user: 'root'
  18. 微信小程序开发过程中出现的内存泄漏问题
  19. 如何自己开发一个Android APP(3)——XML和Android
  20. vscode中converting to execution character set: Illegal byte sequence

热门文章

  1. 计算机软件的英文翻译,软件的英文翻译
  2. 上了 istio 的贼船之 API Gateway
  3. sendmail danted
  4. 雅思系列学习——词汇(持续更新)
  5. CDOJ 1355 柱爷与三叉戟不得不说的故事(枚举子集状压dp)
  6. Centos下jira、confluence利用nginx 代理配置为统一入口
  7. 【渝粤教育】电大中专电商运营实操 (21)作业 题库
  8. LocalSolver-全领域、超大规模混合变量数学规划介绍
  9. 7-5小组日报 最终版的发布
  10. 软件开发进外包三大悔恨