POJ-1006 Biorhythms
【题目描述】
三个周期时间分别为:23,28和33。分别给定三个周期的某一天(不一定是第一天),和开始计算的日期,输出下一个triple peak。
【思路分析】
如果不了解中国剩余定理,可以通过模拟的方式:从开始日期起,寻找第一次遇到高峰的项目,记录;之后寻找该项目的下一个高峰,测试是否另外两个项目也是高峰。
若用中国剩余定理求解,则求:(n+d)%23=p; (n+d)%28=e; (n+d)%33=i,gcd(23, 28, 33)=1。
记p, e, i分别为a1, a2, a3. 并设M = m1*m2*m3 = 23*28*33 = 21252. Mi = M / mi. 故M1 = 28*33 = 924; M2 = 23*33 = 759; M3 = 23*28 = 644.
则解x = a1t1M1 + a2t2M2 + a3t3M3, 其中tiMi=1(mod mi). 下面将求解ti:
ti 实际上为 Mi 模 mi 的逆。可采用辗转相除法得出,见百度文库:
http://wenku.baidu.com/view/ada3397f2f60ddccdb38a04b.html
http://wenku.baidu.com/view/f0894659be23482fb4da4c51.html
【小结】
复习一下中国剩余定理
【附:完整代码】
#include <iostream>
using namespace std; int main()
{
int p, e, i, d, caseno = 1;
const int CIRCLE[3] = {23,28,33};
while (true)
{
cin>>p>>e>>i>>d;
if (p == -1 && e == -1 && i == -1 && d == -1)
break; int testday = d + 1;
int largestIndex;
int largestDay; // 记录第一次遇到高峰的日期testday,和这个高峰是属于哪个项目
while (true)
{
if ((testday-p) % CIRCLE[0] == 0)
{
largestIndex = 0;
largestDay = p;
break;
}
else if ((testday-e) % CIRCLE[1] == 0)
{
largestIndex = 1;
largestDay = e;
break;
}
else if ((testday-i) % CIRCLE[2] == 0)
{
largestIndex = 2;
largestDay = i;
break;
}
else
{
testday++;
}
} // 寻找三个高峰的日期
while (true)
{
if ((largestIndex == 0 || (testday-p) % CIRCLE[0] == 0) &&
(largestIndex == 1 || (testday-e) % CIRCLE[1] == 0) &&
(largestIndex == 2 || (testday-i) % CIRCLE[2] == 0))
{
int resultday = testday - d;
cout<<"Case "<<caseno++<<": the next triple peak occurs in "<< resultday <<" days."<<endl;
break;
} testday += CIRCLE[largestIndex];
} } return 0;
}
POJ-1006 Biorhythms的更多相关文章
- POJ.1006 Biorhythms (拓展欧几里得+中国剩余定理)
POJ.1006 Biorhythms (拓展欧几里得+中国剩余定理) 题意分析 不妨设日期为x,根据题意可以列出日期上的方程: 化简可得: 根据中国剩余定理求解即可. 代码总览 #include & ...
- POJ 1006 - Biorhythms (中国剩余定理)
B - Biorhythms Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Subm ...
- POJ 1006 Biorhythms(中国剩余定理)
题目地址:POJ 1006 学习了下中国剩余定理.參考的该博客.博客戳这里. 中国剩余定理的求解方法: 假如说x%c1=m1,x%c2=m2,x%c3=m3.那么能够设三个数R1,R2,R3.R1为c ...
- poj 1006 Biorhythms (中国剩余定理模板)
http://poj.org/problem?id=1006 题目大意: 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高峰.在高峰这 ...
- [POJ 1006] Biorhythms C++解题
Biorhythms Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 107569 Accepted: 33365 ...
- poj 1006:Biorhythms(水题,经典题,中国剩余定理)
Biorhythms Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 110991 Accepted: 34541 Des ...
- POJ 1006 Biorhythms (中国剩余定理)
在POJ上有译文(原文右上角),选择语言:简体中文 求解同余方程组:x=ai(mod mi) i=1~r, m1,m2,...,mr互质利用中国剩余定理令M=m1*m2*...*mr,Mi=M/mi因 ...
- [POJ] #1006# Biorhythms : 最小公倍数/同余问题
一. 题目 Biorhythms Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 127263 Accepted: 403 ...
- POJ - 1006 Biorhythms 周期相遇 两个思路程序
Description Some people believe that there are three cycles in a person's life that start the day he ...
- POJ 1006 Biorhythms --中国剩余定理(互质的)
Biorhythms Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 103539 Accepted: 32012 Des ...
随机推荐
- (转)MapReduce 中的两表 join 几种方案简介
1. 概述 在传统数据库(如:MYSQL)中,JOIN操作是非常常见且非常耗时的.而在HADOOP中进行JOIN操作,同样常见且耗时,由于Hadoop的独特设计思想,当进行JOIN操作时,有一些特殊的 ...
- Csharp多态的实现概述
(1)什么是多态, 多态就是一个类表现出多种不同的形态, 他的核心是子类对象作为父类对象使用 (2)怎么实现多态, 在Csharp中,可以用接口, 虚方法, 抽象类实现多态,当然,不管是这三种的那一个 ...
- c++中派生类对基类成员的三种访问规则(转)
C++中派生类对基类成员的访问形式主要有以下两种:1.内部访问:由派生类中新增成员对基类继承来的成员的访问.2.对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问.今天给大家介绍在3中 ...
- thinkPHP的常用配置项
'URL_PATHINFO_DEPR'=>'-',//修改URL的分隔符 'TMPL_L_DELIM'=>'<{', //修改左定界符 'TMPL_R_DELIM'=>'}&g ...
- HDU 5054 Alice and Bob
#include <cstdio> int main(){ int n,m,x,y; while(~scanf("%d%d%d%d",&n,&m,&am ...
- openstack nova修改实例路径,虚拟磁盘路径
#实例路径 --instances_path=$state_path/instances #日志的目录 --logdir=/var/log/nova #nova的目录 --state_path=/va ...
- ios中的银联支付
场景 随着移动互联网的迅猛发展,移动互联已经深深地融入我们的生活.其中,支付方式也是我们生活中经常遇到的情况.所以,在我们的应用中加入支付功能是多么的重要.现在主流的支付接口,一是支付宝类的,一是银联 ...
- Nothing2
重压下似乎找不到释放的出口. 拳套早已封存, 竹箫也非常久不去碰它, 如今预计已然吹不出心弦之曲, 围棋的造诣也退步到家了. 是不是仅仅有当思路电光石火, 当指尖快如闪电, 当键盘上舞动的手指跟上思想 ...
- SQL Server索引进阶:第七级,过滤的索引
原文地址: Stairway to SQL Server Indexes: Level 7,Filtered Indexes 本文是SQL Server索引进阶系列(Stairway to SQL S ...
- JAVA处理XML
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName>< ...