3 2 生理週期 POJ 4148(中國剩餘定理)

2021-10-02 17:49:22 字數 1622 閱讀 9160

note:讀題懵,看了書上的解題方法更懵。

能用簡單列舉或跳步列舉是因為,週期長度為23 28 33三數最小公倍數為三數相乘。相當於是乙個極為特殊的數,但一般情況下並不能用這樣的方法。

經查閱  該類題正規的解法為數論中的《中國剩餘定理》應用。

附幾篇就此定理的解釋,待理解。

問題描述:

人生來就有三個生理週期,分別為體力週期、情感週期和智力週期,它們的週期長度分別為23天,28天和33天。每乙個週期中有一天是高峰。在高峰這一天,人會在相應的方面表現出色。例如,在治理週期的高峰,人會思維敏捷,注意力容易高度集中。因為三個週期的長度不同,所以通常三個週期的高峰不會在同一天。對於每個人,想知道何時三個高峰在同一天。對於每個週期,會給出從當前年份的第一天開始到出現高峰的天數(不一定是第一次出現高峰的時間)。給定乙個從當年第一天開始的天數,你的任務是輸出從給定時間開始(不包括給定時間),下一次三個高峰在同一天的時間(距給定時間的天數)。例如,給定時間為10,下次出現三個高峰同一天的時間是12,則輸出2(注意這裡不是3)。

輸入資料:

輸入包含多組資料,每一組資料由4個整數組成,資料以-1 -1 -1 -1 結束。

4個整數 (p,e,i,d)分別表示(給定時間到體力,情感,智力高峰出現的天數;給定時間)。

所有時間是非負的並且小於或等於365,所求時間小於或等於21252。

輸入樣例:

0 0 0 0 

0 0 0 100

5 20 34 325

4 5 6 7

283 102 23 320

203 301 203 40

-1 -1 -1 -1

輸出樣例:

case1: the next triple peak occurs in 21252 days.

case2: the next triple peak occurs in 21152 days.

case3: the next triple peak occurs in 19575 days.

case4: the next triple peak occurs in 16994 days.

case5: the next triple peak occurs in 8910 days.

case6: the next triple peak occurs in 10789 days.

解題思路:

解法1(暴力):從給定的時間開始,遍歷到21252,找到最早出現的某一天,在這一天體力、情感和智力高峰均出現,即滿足

(j-p)%23==0、(j-e)%33==0、(j-i)%33==0

解法2:檢索時可以利用已經發現的高峰值來加速搜尋過程。例如,若發現第102天是體力的高峰值,那麼第103,104,105...124天都不可能是體力、情感和智力高峰均出現的時間,因此可以直接跳到第102+23 = 125天。這個優化策略可以概括為:若某項高峰值的時間已經出現,則該高峰值的出現週期可以作為搜尋步長。

#include#include#includeusing namespace std;

int main()

system("pause");

return 0;

}

OpenJ Bailian 4148 生理週期

openj bailian 4148 time limit1000 ms memory limit65536 kb os linux sourceeast central north america 1999 人生來就有三個生理週期,分別為體力週期 感情週期和智力週期,它們的週期長度分別為23天 2...

列舉 bailian 4148 生理週期

總時間限制 1000ms 記憶體限制 65536kb 描述人生來就有三個生理週期,分別為體力週期 感情週期和智力週期,它們的週期長度分別為23天 28天和33天。每乙個週期中有一天是高峰。在高峰這天,人會在相應的方面表現出色。例如,在智力週期的高峰,人會思維敏捷,注意力容易高度集中。因為三個週期的長...

1007 生理週期

時間限制 10 sec 記憶體限制 128 mb 提交 250 解決 153 提交 狀態 討論版 人生來就有三個生理週期,分別為體力 感情和智力週期,它們的週期長度為23 天 28 天和33 天。每乙個週期中有一天是高峰。在高峰這天,人會在相應的方面表現出色。例如,智力週期的高峰,人會思維敏捷,精力...