zoukankan      html  css  js  c++  java
  • POJ 1006 Biorhythms | 中国剩余定理

    题目:

    人自出生起就有体力,情感和智力三个生理周期,分别为23,28和33天。一个周期内有一天为峰值,在这一天,人在对应的方面(体力,情感或智力)表现最好。

    通常这三个周期的峰值不会是同一天。现在给出三个日期,分别对应于体力,情感,智力出现峰值的日期。

    然后再给出一个起始日期,要求从这一天开始,算出最少再过多少天后三个峰值同时出现。


    题解:中国剩余定理.参考了这篇博文.

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 using namespace std;
     5 int p,e,i,d,t=1,cnt,a[5],m[5];
     6 int exgcd(int a,int b,int &x,int &y)
     7 {
     8     if (b==0) return x=1,y=0,a;
     9     int r=exgcd(b,a%b,y,x);
    10     y-=(a/b)*x;
    11     return r;
    12 }
    13 int CRT(int a[],int m[],int n)
    14 {
    15     int M=1;
    16     int ans=0;
    17     for (int i=1;i<=n;i++)
    18     M*=m[i];
    19     for (int i=1;i<=n;i++)
    20     {
    21     int x,y;
    22     int Mi=M/m[i];
    23     exgcd(Mi,m[i],x,y);
    24     ans=(ans+Mi*x*a[i])%M;
    25     }
    26     if (ans<0) ans+=M;
    27     return ans;
    28 }
    29 int main()
    30 {
    31     while (scanf("%d%d%d%d",&p,&e,&i,&d)!=EOF)
    32     {
    33     if (p==-1 && e==-1 && i==-1 && d==-1)
    34         break;
    35     a[1]=p;
    36     a[2]=e;
    37     a[3]=i;
    38     m[1]=23;
    39     m[2]=28;
    40     m[3]=33;
    41     int ans=CRT(a,m,3);
    42     if (ans<=d)
    43         ans+=21252;
    44     printf("Case %d: the next triple peak occurs in %d days.
    ",++cnt,ans-d);
    45     }
    46     return 0;
    47 }
  • 相关阅读:
    MyEclipse添加SVN插件
    Postgresql的character varying = bytea问题
    Hibernate主键增加方式
    java配置环境变量
    Maven常用构建命令
    Postgresql的主键自增长
    js判断金额
    最精简的SQL教程
    SQL练习1:统计班级男女生人数
    sql 百万级数据库优化方案
  • 原文地址:https://www.cnblogs.com/mrsheep/p/7905819.html
Copyright © 2011-2022 走看看