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. mysql数据库创建和权限分配

    查询安装路径: whereis mysql连接mysql: mysql -u root -p第一步:创建用户CREATE USER 'claim_prod'@'%' IDENTIFIED BY 'Pa ...

  2. Tomcat主页404错误

    单独启动Tomcat正常,但是通过Eclipse启动(这时启动也是正常的)后,访问Tomcat主页报404错误. 在网上找到了解决办法:http://www.jb51.net/article/8283 ...

  3. 贪心算法——字典序最小问题,Saruman‘s Army

    题目描述 Best Cow Line (POJ 3617) 给定长度为N的字符串S,要构造一个长度为N字符串T.T是一个空串,反复执行下列任意操作: 从S的头部删除一个字符,加到T的尾部: 从S的尾部 ...

  4. fabric简单案例

    1  执行一个简单的task任务,显示两台机器的/home/guol/目录下的文件 from fabric.api import * env.users='root' env.port=22 env. ...

  5. R语言入门 :基本数据结构

    1.向量 向量是R语言中最基本的数据类型,在R语言中没有单独的变量. (1)  创建向量 R语言中可以用 = 或者 <- 来赋值. 向量名 <- 向量 或  向量名 = 向量 向量的创建方 ...

  6. go语言之行--文件操作、命令行参数、序列化与反序列化详解

    一.简介 文件操作对于我们来说也是非常常用的,在python中使用open函数来对文件进行操作,而在go语言中我们使用os.File对文件进行操作. 二.终端读写 操作终端句柄常量 os.Stdin: ...

  7. 20155317王新玮《网络对抗》Exp2 后门原理与实践

    20155317王新玮<网络对抗>Exp2 后门原理与实践 一.实验内容 (1)使用netcat获取主机操作Shell,cron启动 (2)使用socat获取主机操作Shell, 任务计划 ...

  8. 1、JVM 内存模型+运行时数据区+JVM参数

    JMM(内存模型)  1.’主内存+每个线程有自己的内存 JVM运行时数据区 包含:1.程序计算器(每个线程自带):2.JAVA-STACK(每个线程自带):3.本地方法stack:4.堆:5.方法区 ...

  9. LOJ#6354. 「CodePlus 2018 4 月赛」最短路[最短路优化建图]

    题意 一个 \(n\) 个点的完全图,两点之间的边权为 \((i\ xor\ j)*C\) ,同时有 \(m\) 条额外单向路径,问从 \(S\) 到 \(T\) 的最短路. \(n\leq 10^5 ...

  10. Wannafly挑战赛26-F-msc的棋盘[最小割转化dp]

    题意 一个大小为 \(n*m\) 的棋盘,知道每一列放了多少棋子,求有多少摆放方案满足要求. \(n,m\leq 50\) . 分析 如果是求是否有方案的话可以考虑网络流,行列连边,列容量为 \(b_ ...