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;
    }
    
  • 相关阅读:
    约瑟夫环公式解
    闭区间筛素数个数
    欧拉函数
    负进制转换
    2018黑龙江省赛总结
    基础博弈——威佐夫与尼姆不得不说的那些事
    极角排序
    int型素数拆分
    快速幂与费马小定理与组合数
    A*搜索算法
  • 原文地址:https://www.cnblogs.com/shuitiangong/p/12867917.html
Copyright © 2011-2022 走看看