列舉 bailian 4148 生理週期

2022-05-27 01:15:10 字數 1519 閱讀 7863

總時間限制: 1000ms 記憶體限制: 65536kb

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

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

對於四個整數p, e, i和d,p, e, i分別表示體力、情感和智力高峰出現的時間(時間從當年的第一天開始計算)。d是給定的時間,可能小於p, e或i。所有給定時間是非負的並且小於或等於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

樣例輸出

case 1: the next triple peak occurs in 21252 days.

case 2: the next triple peak occurs in 21152 days.

case 3: the next triple peak occurs in 19575 days.

case 4: the next triple peak occurs in 16994 days.

case 5: the next triple peak occurs in 8910 days.

case 6: the next triple peak occurs in 10789 days.

**east central north america 1999

如果用比較直接的列舉來解這個問題的話,就可以從d + 1天開始,一直到21252天,每天檢查一下是不是同時滿足triple peak。

比較優化的解法就是,先找到乙個peak,比如體力週期的peak,然後peak + 1, peak + 2, ... ,都不可能是triple peak,因為它們已經不是體力週期的peak了,所以可以從體力週期peak開始,以步長23搜尋,找到體力和情感雙高峰,然後以步長28 * 23找到triple peak。

這種思想在列舉中是比較常見的,就是通過減小搜尋空間來加快列舉的速度。

#include #include int p, e, i, d, cnt = 0;

int main()

return 0;

}

OpenJ Bailian 4148 生理週期

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

2977 生理週期(列舉)

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

1007 生理週期

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