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

    题目链接

    题目大意

      人自出生起就有体力,情感和智力三个生理周期,分别为23,28和33天。一个周期内有一天为峰值。现在给出三个日期,分别对应于体力,情感,智力出现峰值的日期。然后再给出一个起始日期,要求从这一天开始,算出最少再过多少天后三个峰值同时出现。

    解题思路

      这是一道关于中国剩余定理的裸题。我们对问题稍微变形,就可以把它转换成让你求一个日期k,k模23得p,模28得e,模33得i,问这个数与日期d的差值(这个数必须大于d)。也就转换成了经典的中国剩余定理问题。

    代码

    int a, b, c, d, x, y, kase = 1;
    int exgcd(int a, int b) {
        if (!b) {
            x = 1, y = 0;
            return x;
        }
        exgcd(b, a%b);
        ll t = x; x = y;
        y = t - a/b*y;
        return (x%b+b)%b;
    }
    int inv1 = exgcd(28*33, 23);
    int inv2 = exgcd(23*33, 28);
    int inv3 = exgcd(23*28, 33);
    int crt() {
        int sum = a*28*33*inv1 + b*23*33*inv2 + c*23*28*inv3 - d;
        sum = (sum+21252)%21252;
        if (!sum) sum += 21252;
        return sum;
    }
    int main(){
        while(~scanf("%d%d%d%d", &a, &b, &c, &d) && (~a&&~b&&~c&&~d)) {
            a %= 23; b %= 28; c %= 33;
            printf("Case %d: the next triple peak occurs in %d days.
    ", kase++, crt());
        }
        return 0;
    }
    
  • 相关阅读:
    SpringMVC初识视图解析器
    初识SpringMVC
    C++ 虚函数表
    C++ 纯虚函数 + 抽象类
    C++ 虚析构函数
    C++ 虚函数
    C++ 多态
    leetcode
    leetcode
    leetcode 10.正则表达式匹配
  • 原文地址:https://www.cnblogs.com/shuitiangong/p/12867917.html
Copyright © 2011-2022 走看看