poj1006 Biorhythms

Biorhythms

POJ - 1006

题意:人自出生起就有体力,情感和智力三个生理周期,分别为23,28和33天。一个周期内有一天为峰值,在这一天,人在对应的方面(体力,情感或智力)表现最好。通常这三个周期的峰值不会是同一天。现在给出三个日期,分别对应于体力,情感,智力出现峰值的日期。然后再给出一个起始日期,要求从这一天开始,算出最少再过多少天后三个峰值同时出现。

/*
    x=p(mod 23)
    x=e(mod 28)
    x=i(mod 33)
    题目就是要求上面同余方程的解,用中国剩余定理求解
*/
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int a[5],m[5];
void Exgcd(int a,int b,int &x,int &y){
    if(b==0){x=1;y=0;return;}
    Exgcd(b,a%b,x,y);
    int tmp=x;
    x=y;
    y=tmp-(a/b)*y;
}
int CRT(int a[],int m[],int n){
    int M=1,ans=0;
    for(int i=1;i<=n;i++)M*=m[i];
    for(int i=1;i<=n;i++){
        int x,y,Mi=M/m[i];
        Exgcd(Mi,m[i],x,y);
        ans=(ans+Mi*x*a[i])%M;
    }
    if(ans<0)ans+=M;
    return ans;
}
int main(){
    freopen("Cola.txt","r",stdin);
    int p,e,i,d,Case=0;
    while(1){
        Case++;
        scanf("%d%d%d%d",&p,&e,&i,&d);
        if(p==-1&&e==-1&&i==-1&&d==-1)return 0;
        a[1]=p;a[2]=e;a[3]=i;
        m[1]=23;m[2]=28;m[3]=33;
        int ans=CRT(a,m,3);
        if(ans<=d)ans+=21252;
        printf("Case %d: the next triple peak occurs in %d days.\n",Case,ans-d);
    }
}
时间: 2024-10-17 02:08:57

poj1006 Biorhythms的相关文章

POJ1006——Biorhythms(中国剩余定理)

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

POJ-1006: biorhythms 详解2: 叠加取余

> 分析 >> 因为days可能小于p, e, i, 所以首先让p,e,i等于各自第一次循环的起点 >> 分三步进行叠加, 根据题意days从 d+1 开始 1. 计算第一个 days % 23 == p 的点(这一步可以一次计算出来) 2. 从上一步的结果开始,找到第一个 days % 28 == e 的点, 每次增加 23 3. 从上一步的结果开始,找到第一个 days % 33 == i 的点, 每次增加 23 * 28 > 注意 >> 计算出days

POJ-1006: biorhythms 详解1: 中国剩余定理

> 分析 >> 三个周期是三个互质数, 可以很简单的使用中国剩余定理 > 附代码 1 /* ------------------------- 2 * 中国剩余定理 3 * -------------------------*/ 4 #include "stdio.h" 5 6 int main(void) 7 { 8 int p = 0, e = 0, i = 0, d = 0 ; 9 int days = 0 ; 10 int count = 0 ; 11

数论之拓展欧几里得求解不定方程和同余方程组(一)

今天接到scy的压缩包,开始做数论专题.那今天就总结一下拓展欧几里得求解不定方程和同余方程组. 首先我们复习一下欧几里得算法: 1 int gcd(int a,int b){ 2 if(b==0) return a; 3 return gcd(b,a%b);4 } 拓展欧几里得算法: 推导过程: 给出A和B,求它们的最大公约数,并且求出x和y,满足Ax+By=gcd(A,B). 当A=0时,x=0,y=1; 当A>0时, 因为exgcd(A,B,x,y)表示Ax+By=gcd(A,B) 而且ex

Biorhythms(poj1006+中国剩余定理)

生理周期 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 117861   Accepted: 36978 Description 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高峰.在高峰这天,人会在相应的方面表现出色.例如,智力周期的高峰,人会思维敏捷,精力容易高度集中.因为三个周期的周长不同,所以通常三个周期的高峰不会落在同一天.对于每个人,我们想知道

【POJ1006】Biorhythms

题面 人自出生起就有体力,情感和智力三个生理周期,分别为23,28和33天.一个周期内有一天为峰值,在这一天,人在对应的方面(体力,情感或智力)表现最好.通常这三个周期的峰值不会是同一天.现在给出三个日期,分别对应于体力,情感,智力出现峰值的日期.然后再给出一个起始日期,要求从这一天开始,算出最少再过多少天后三个峰值同时出现. 分析 中国剩余定理(CRT)裸题 一句话概括中国剩余定理:(每个式子的余数*其他所有数的最小公倍数模当前数的逆元*其他所有数的最小公倍数)%所有数的最小公倍数 因为CRT

poj1006 孙子定理

Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 127944   Accepted: 40566 Description Some people believe that there are three cycles in a person's life that start the day he or she is born. These three cycles are the physical,

Biorhythms(中国剩余定理)

Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 127339   Accepted: 40342 Description Some people believe that there are three cycles in a person's life that start the day he or she is born. These three cycles are the physical,

数论E - Biorhythms(中国剩余定理,一水)

E - Biorhythms Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status Description Some people believe that there are three cycles in a person's life that start the day he or she is born. These three cycles are the