HDU1370(中国剩余定理)

昨天我仔细一想,发现自己之前的分类(用OJ来划分,毫无意义啊!)太失败了,所以我重新划分了一下大分类,在分到数论的时候,我就想起了中国剩余定理了,于是乎今天就刷了一题中国剩余定理的题目了,话说太久没作数学题,导致我连样例都调了好多次(在算逆元时候老是算错~烦恼!),好在提交时候是1A。

题目的意思就是:人有三个周期,记为p,e,i,周期天数分别为23,28,33,现在给定你三个时间a,b,c,和一个天数d,a,b,c分别表示p,e,i出现的天数,问下一次出现的大于d的天数是今年的第几天,即输出天数X-d.因为23,28,33互素,所以就可以用中国剩余定理啦!否则的话,只能分解了!上学期学数论的时候很多时候多是要自己分解~

对于28*33,23*33,23*28分别求逆元(不知道什么是逆元的话,你可以理解为n是n‘ mod m的逆元,当且仅当n*n‘ mod m=1),得到6,19,2.

之后答案就是ans=6*28*33*a+19*23*33*b+2*23*28*c + k*(23*28*33),这个k要取到ans>d

ACcode

/***********************************************************
	> OS     : Linux 3.2.0-60-generic #91-Ubuntu
	> Author : yaolong
	> Mail   : [email protected]
	> Time   : 2014年06月09日 星期一 07:34:32
 **********************************************************/
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
int b[5];
int main(){

    int a;
    //23,28,33
    int m=23*28*33;
    int M[]={6,19,2};
    int M_[]={28*33,23*33,23*28};
    cin>>a;

    int ind=1;
    while(cin>>b[0]>>b[1]>>b[2]>>b[3]){
        if(b[0]==-1&&b[1]==-1&&b[2]==-1&&b[3]==-1){
            return 0;
        }
        int ans=0;
        for(int i=0;i<3;i++){
         ans=(ans+M[i]*M_[i]*b[i])%m;
        }
        while(ans<=b[3]){
            ans+=m;
        }
        cout<<"Case "<<(ind++)<<": the next triple peak occurs in "<<ans-b[3]<<" days."<<endl;

    }

return 0;
}

HDU1370(中国剩余定理)

时间: 2024-10-29 19:11:13

HDU1370(中国剩余定理)的相关文章

poj1006 ( hdu1370 ):中国剩余定理裸题

裸题,没什么好说的 第一个中国剩余定理 写暴力都过了..可见这题有多水 代码: #include<iostream> #include<stdio.h> #include<math.h> #include<string> #include<map> #include<algorithm> using namespace std; #define MAX 200000000 #define ull unsigned long long

Biorhythms HDU - 1370 (中国剩余定理)

题目链接:https://cn.vjudge.net/problem/HDU-1370 题目大意:给你三个式子,让你求出满足题目条件的解. (n-d)%23=p,(n-d)%28=e,(n-d)%33=i.给你d,p,e,i,让你求出n的值,其实把(n-d)看成一个整体,求出来之后再减去d就能求出n了. 中国剩余定理模板也存一下. m数组是被除数,下标从0开始 m[0]=23,m[1]=28,m[2]=33. b数组是等号右边的数,下标从0开始,b[0]=p,b[1]=e,b[2]=i. 然后求

Hello Kiki(中国剩余定理——不互质的情况)

Hello Kiki Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 247 Accepted Submission(s): 107   Problem Description One day I was shopping in the supermarket. There was a cashier counting coins serio

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,

lightoj 1319 - Monkey Tradition (中国剩余定理)

1319 - Monkey Tradition PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB In 'MonkeyLand', there is a traditional game called "Bamboo Climbing". The rules of the game are as follows: 1)       There are N monkeys who play

HDU 5446 Unknown Treasure(lucas + 中国剩余定理 + 模拟乘法)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5446 题目大意:求C(n, m) % M, 其中M为不同素数的乘积,即M=p1*p2*...*pk, 1≤k≤10.1≤m≤n≤10^18. 分析: 如果M是素数,则可以直接用lucas定理来做,但是M不是素数,而是素数的连乘积.令C(n, m)为 X ,则可以利用lucas定理分别计算出 X%p1,X%p2, ... , X % pk的值,然后用中国剩余定理来组合得到所求结果. 比较坑的地方是,

UVA 11754 Code Feat (枚举,中国剩余定理)

转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud C Code Feat   The government hackers at CTU (Counter-Terrorist Unit) have learned some things about the code, but they still haven't quite solved it.They know it's a single, strictly positive

hdu1573X问题(不互素的中国剩余定理)

X问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3295    Accepted Submission(s): 1068 Problem Description 求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X mod a[1] = b[1], X mod a[2] = b[2], -, X mo

对于中国剩余定理(CRT)的初步理解

以前觉得用中国剩余定理来求同余方程组很鸡肋,因为可以用拓展欧几里得算法来构造出一种更加强大(可以处理取模的数(默认为mi)不互质的情况)的算法. 今天查了点资料,发现我太天真了. 首先讲讲中国剩余定理: 即 : x ≡ a[i] (mod m[i]) 1<= i <= r (m[i] 两两互质) 求这个同余方程组可以快速算: x = ∑M/m[i] * Inv(M/m[i], m[i]) * a[i] (mod M) 其中M = m[1]*m[2]*m[3]...m[r]  , Inv(x,