一本通1639Biorhythms
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的更多相关文章
- CJOJ 2040 【一本通】分组背包(动态规划)
CJOJ 2040 [一本通]分组背包(动态规划) Description 一个旅行者有一个最多能用V公斤的背包,现在有n件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2, ...
- CJOJ 2307 【一本通】完全背包(动态规划)
CJOJ 2307 [一本通]完全背包(动态规划) Description 设有n种物品,每种物品有一个重量及一个价值.但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n种物品中选取若干 ...
- CJOJ 2022 【一本通】简单的背包问题(搜索)
CJOJ 2022 [一本通]简单的背包问题(搜索) Description 设有一个背包可以放入的物品重量为S,现有n件物品,重量分别是w1,w2,w3,-wn. 问能否从这n件物品中选择若干件放入 ...
- CJOJ 2044 【一本通】最长公共子序列(动态规划)
CJOJ 2044 [一本通]最长公共子序列(动态规划) Description 一个给定序列的子序列是在该序列中删去若干元素后得到的序列.确切地说,若给定序列X,则另一序列Z是X的子序列是指存在一个 ...
- 【一本通1329:【例8.2】细胞&&洛谷P1451 求细胞数量】
1329:[例8.2]细胞 [题目描述] 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.如: 阵列 4 10 023 ...
- 一本通 1223:An Easy Problem
\[传送门qwq\] [题目描述] 给定一个正整数N,求最小的.比N大的正整数M,使得M与N的二进制表示中有相同数目的1. 举个例子,假如给定的N为78,其二进制表示为1001110,包含4个1,那么 ...
- 一本通之 一堆迷宫 (Dungeon Master&走出迷宫&走迷宫)
一本通在线崩溃....... . 有图有真相 这是个三维迷宫,其实和二位迷宫差不多,只是方向多加了2个. 但这个题的输入十分恶心,一度被坑的用cin.ignore(),但还是不过... 它的正确输入方 ...
- 一本通 1212:LETTERS
题目描述 给出一个roe×col的大写字母矩阵,一开始的位置为左上角,你可以向上下左右四个方向移动,并且不能移向曾经经过的字母.问最多可以经过几个字母. 输入 第一行,输入字母矩阵行数R和列数S,1≤ ...
- 【洛谷p2669】【一本通p1100】金币
(今天高产) 金币[传送门] 洛谷上的算法标签 自我感觉主要靠循环 这道题是2015年NOIp普及组的题,其实还是很简单的.但为什么写这道题呢? 这道题第一次接触是在一本通刷题的时候,当时学循环结构, ...
随机推荐
- Vim2.1-Vim简明教程【CoolShell】【非原创】
vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的.下面的文章翻译自<Learn Vim Progress ...
- 微信小程序开发 [07] 写在后面的话
写在后面的话基本算是吐槽了,在学完小程序的课程之后,我用博客园的api,写了个闪存的小程序,本来兴致勃勃甚至这篇是准备写"我的第一个小程序发布啦",然而并没有. 不是说我偷懒了没写 ...
- Fiddler抓包调试前端脚本代码
0.写在前面的话 之前看了阮一峰老师关于互联网协议入门的博客,受益匪浅,接着再去体会了下HTTP协议,就想着看实际网络访问中的那些HTTP请求头和响应是什么样的.Chrome的调试工具的Network ...
- 【MongoDB】MongoDB的下载 安装 配置及使用
windows系统 教程 1.下载地址 (官方提供根据系统位数选择对应的bit.exe下载) 由于自己win32系统不支持该官方版本,在网上又找了个 mongodb-win32-i386版本 p ...
- go语言之行--文件操作、命令行参数、序列化与反序列化详解
一.简介 文件操作对于我们来说也是非常常用的,在python中使用open函数来对文件进行操作,而在go语言中我们使用os.File对文件进行操作. 二.终端读写 操作终端句柄常量 os.Stdin: ...
- # 2017-2018-2 20155319『网络对抗技术』Exp7:网络欺诈防范
2017-2018-2 20155319『网络对抗技术』Exp7:网络欺诈防范 一.原理与实践说明 1.实践目标 本实践的目标是:理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法. 2. ...
- 20155330 《网络对抗》 Exp9 web安全基础实践
20155330 <网络对抗> Exp9 web安全基础实践 实验问题回答 SQL注入攻击原理,如何防御 原理:SQL注入攻击值得是通过构建特殊的输入作为参数传入web应用程序,而这些输入 ...
- Kubernetes学习之路(二十三)之资源指标和集群监控
目录 1.资源指标和资源监控 2.Weave Scope监控集群 (1)Weave Scope部署 (2)使用 Scope (3)拓扑结构 (4)实时资源监控 (5)在线操作 (6)强大的搜索功能 2 ...
- Codeforces 948D Perfect Security(字典树)
题目链接:Perfect Security 题意:给出N个数代表密码,再给出N个数代表key.现在要将key组排序,使key组和密码组的亦或所形成的组字典序最小. 题解:要使密码组里面每个数都找到能使 ...
- JavaScript快速入门-ECMAScript本地对象(Number)
Number 对象是原始数值的包装对象. 创建一个Number对象:var myNum=new Number(value); 注意: 1.参数 value 是要创建的 Number 对象的数值,或是要 ...