1639:Biorhythms

时间限制: 1000 ms         内存限制: 524288 KB

【题目描述】

原题来自:POJ 1006

人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为 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。

sol:恶心的题面让蒟蒻的我一遍遍读错。。。

题意就是

求n满足
(n+d)%T1 = Yus1
(n+d)%T2 = Yus2
(n+d)%T3 = Yus3

(其中T和Yus已知)

随便推推,还挺裸的


原式求n满足
(n+d)%T1 = Yus1
(n+d)%T2 = Yus2
(n+d)%T3 = Yus3
转化一下就是求
N%T1 = Yus1
N%T2 = Yus2
N%T3 = Yus3 (N>d)
其中 T1=23 T2=28 T3=33

N = Yus1+T1*k1
N = Yus2+T2*k2
N = Yus3+T3*k3

Yus1+T1*k1 = Yus2+T2*k2
T1*k1-T2*k2 = Yus2-Yus1
T1*k1+T2*k2 = Yus2-Yus1 (类ax+bYus=c的形式)
求出k1,k2
Ans=T1*k1+Yus1就是一个特解 设通解为P
P=Ans+K*LCM LCM=lcm(T1,T2)
合并后式子就是 P%LCM = Ans
下一个式子就是
Ans+K*LCM = Yus3+T3*k3
k*LCM-T3*k3 = Yus3-Ans
求出k,k*LCM+Ans就是通解了


/*
原式求n满足
(n+d)%T1 = Yus1
(n+d)%T2 = Yus2
(n+d)%T3 = Yus3
转化一下就是求
N%T1 = Yus1
N%T2 = Yus2
N%T3 = Yus3 (N>d)
其中 T1=23 T2=28 T3=33 N = Yus1+T1*k1
N = Yus2+T2*k2
N = Yus3+T3*k3 Yus1+T1*k1 = Yus2+T2*k2
T1*k1-T2*k2 = Yus2-Yus1
T1*k1+T2*k2 = Yus2-Yus1 (类ax+bYus=c的形式)
求出k1,k2
Ans=T1*k1+Yus1就是一个特解 设通解为P
P=Ans+K*LCM LCM=lcm(T1,T2)
合并后式子就是 P%LCM = Ans
下一个式子就是
Ans+K*LCM = Yus3+T3*k3
k*LCM-T3*k3 = Yus3-Ans
求出k,k*LCM+Ans就是通解了
*/
#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int Mod=;
int T[],Yus[];
inline int gcd(int a,int b)
{
return (!b)?(a):(gcd(b,a%b));
}
inline void Exgcd(int a,int b,int &X,int &Y)
{
if(b==)
{
X=;
Y=;
return;
}
Exgcd(b,a%b,X,Y);
int XX=X,YY=Y;
X=YY;
Y=XX-a/b*YY;
return;
}
int main()
{
int i,d,Cnt=;
int a,b,c,r,X,Y,LCM,Ans;
while(true)
{
for(i=;i<=;i++)
{
Yus[i]=read();
}
d=read();
T[]=; T[]=; T[]=;
if(Yus[]==-&&Yus[]==-&&Yus[]==-&&d==-) break;
LCM=T[]; Ans=;
for(i=;i<=;i++)
{
a=T[i-]; b=T[i]; c=Yus[i]-Yus[i-]; r=gcd(a,b);
Exgcd(a,b,X=,Y=);
X=X*c/r;
int tmp=b/r;
X=(X%tmp+tmp)%tmp;
if(X==) X+=tmp;
LCM=LCM*T[i]/r;
T[i]=LCM;
Ans=X*T[i-]+Yus[i-];
Ans%=LCM;
Yus[i]=Ans;
}
while(Ans<=d) Ans+=LCM;
printf("Case %d: the next triple peak occurs in %d days.\n",++Cnt,Ans-d);
}
return ;
}
/*
input
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
output
Case 1: the next triple peak occurs in 21252 daYuss.
Case 2: the next triple peak occurs in 21152 daYuss.
Case 3: the next triple peak occurs in 19575 daYuss.
Case 4: the next triple peak occurs in 16994 daYuss.
Case 5: the next triple peak occurs in 8910 daYuss.
Case 6: the next triple peak occurs in 10789 daYuss.
*/

一本通1639Biorhythms的更多相关文章

  1. CJOJ 2040 【一本通】分组背包(动态规划)

    CJOJ 2040 [一本通]分组背包(动态规划) Description 一个旅行者有一个最多能用V公斤的背包,现在有n件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2, ...

  2. CJOJ 2307 【一本通】完全背包(动态规划)

    CJOJ 2307 [一本通]完全背包(动态规划) Description 设有n种物品,每种物品有一个重量及一个价值.但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n种物品中选取若干 ...

  3. CJOJ 2022 【一本通】简单的背包问题(搜索)

    CJOJ 2022 [一本通]简单的背包问题(搜索) Description 设有一个背包可以放入的物品重量为S,现有n件物品,重量分别是w1,w2,w3,-wn. 问能否从这n件物品中选择若干件放入 ...

  4. CJOJ 2044 【一本通】最长公共子序列(动态规划)

    CJOJ 2044 [一本通]最长公共子序列(动态规划) Description 一个给定序列的子序列是在该序列中删去若干元素后得到的序列.确切地说,若给定序列X,则另一序列Z是X的子序列是指存在一个 ...

  5. 【一本通1329:【例8.2】细胞&&洛谷P1451 求细胞数量】

    1329:[例8.2]细胞 [题目描述] 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.如: 阵列 4 10 023 ...

  6. 一本通 1223:An Easy Problem

    \[传送门qwq\] [题目描述] 给定一个正整数N,求最小的.比N大的正整数M,使得M与N的二进制表示中有相同数目的1. 举个例子,假如给定的N为78,其二进制表示为1001110,包含4个1,那么 ...

  7. 一本通之 一堆迷宫 (Dungeon Master&走出迷宫&走迷宫)

    一本通在线崩溃....... . 有图有真相 这是个三维迷宫,其实和二位迷宫差不多,只是方向多加了2个. 但这个题的输入十分恶心,一度被坑的用cin.ignore(),但还是不过... 它的正确输入方 ...

  8. 一本通 1212:LETTERS

    题目描述 给出一个roe×col的大写字母矩阵,一开始的位置为左上角,你可以向上下左右四个方向移动,并且不能移向曾经经过的字母.问最多可以经过几个字母. 输入 第一行,输入字母矩阵行数R和列数S,1≤ ...

  9. 【洛谷p2669】【一本通p1100】金币

    (今天高产) 金币[传送门] 洛谷上的算法标签 自我感觉主要靠循环 这道题是2015年NOIp普及组的题,其实还是很简单的.但为什么写这道题呢? 这道题第一次接触是在一本通刷题的时候,当时学循环结构, ...

随机推荐

  1. PAT B1007 素数对猜想 (20 分)

    让我们定义d​n​​为:d​n​​=p​n+1​​−p​n​​,其中p​i​​是第i个素数.显然有d​1​​=1,且对于n>1有d​n​​是偶数.“素数对猜想”认为“存在无穷多对相邻且差为2的素 ...

  2. Python 函数(二)

    Python 3 函数(匿名函数.偏函数 and 变量作用域:全局变量.局部变量) 一.匿名函数:没有名字,也不再使用 def 语句这样标准的形式定义的一个函数. OCP培训说明连接:https:// ...

  3. php连接mysql...mysqli和mysql

    mysql_connect()这一系列函数已经不推荐使用了,不安全. <?php $con = mysql_connect('localhost','root','');// 选择连接数据库系统 ...

  4. bat 栈上限

    栈耗尽,递归会导致该问题. ****** B A T C H R E C U R S I O N exceeds STACK limits ******Recursion Count=1240, St ...

  5. 如何挂载另一个lvm硬盘

    由于测试导致系统启动不了,需要将系统中的数据拷贝出来,所以想到将磁盘挂载到另一个能用的系统中进行拷贝,但是由于创建的系统都是用默认的方式创建的,所以一般的系统盘都是由两个分区组成,例如/dev/sda ...

  6. spring-boot dubbo项目使用docker方式部署

    项目结构 本项目采用maven构建,有三个模块,分别是pms-interfaces, pms-services, pms-portal. 模块 描述 pms-interfaces 接口层,只能存放实体 ...

  7. dotnet core webapi 发布部署到docker的步骤

    1. 创建web api项目,编译并测试成功 2. 在项目的根目录添加Dockerfile文件,注意:Dockerfile文件名区分大小写 文件内容如下 # 基于microsoft/dotnet:la ...

  8. 使用fddb的测试工具测试自己的检测器

    本文是在linux下测试的,首先编译,并安装gnuplot 按照程序给定,将文件放置到对应的文件夹下 #runEvaluate.pl # where gnuplot ismy $GNUPLOT = & ...

  9. Spring Boot (十三): Spring Boot 小技巧

    一些 Spring Boot 小技巧.小知识点 初始化数据 我们在做测试的时候经常需要初始化导入一些数据,如何来处理呢?会有两种选择,一种是使用 Jpa,另外一种是 Spring JDBC .两种方式 ...

  10. SSRS配置2:加密管理

    在初始化Reporting Service时,SSRS会自动创建数据库[ReportServer],用于存储报表元数据,报表订阅,以及凭证(Credential)和连接信息等身份验证信息,身份验证数据 ...