大贤者福尔经过长期的研究后发现,人的体力、智商和情商和运气具有周期性,会有高峰和低估,并且呈现出周期性变化的规律。在每一个周期中会有一天是高峰,这一天人会在某个方便表现的非常出色。尽管如此,由于这些周期的长度不一致, 通常情况下几个周期的高峰不会在同一天出现。但大众又都希望哪一天是自己的巅峰日,在这一天中,自己的体力、智商和情商和运气都达到高峰。 输入 输入数据有若干组,每一组包括两行数据,第一行包括4个正整数,分别为体力、智商和情商和运气的周期,已知最大周期不超过50。第二行包括5个非负整数p,i,e,l,dp,i,e,l,d,分别表示体力、智商、情商、和运气在一年中第一次达到高峰的时间(从一年的第一天开始算起,第一天记为0),dd为计算的开始时间(从一年第一天开始的天数)。所有时间非负且小于365。 输出 对每组测试数据,在单独的行中输出结果。先输出当前测试样例的组号Case x:,x为测试样例编号,随后输出第一个巅峰日距离给定日期 dd 的天数。 若在有生之年都无法找到这样的日子,则输出No such days.。所谓有生之年是指不超过上述周期之积后一年的日期范围。
时间: 2024-03-26 11:35:45 浏览: 140
以下是 Python 代码实现:
```python
import sys
def find_peak_day(p, i, e, d, dp, di, de, dl, dd, max_day):
for day in range(dd, max_day + 1):
cur_p = (day - dp) % p
cur_i = (day - di) % i
cur_e = (day - de) % e
cur_l = (day - dl) % 23
if cur_p == 0 and cur_i == 0 and cur_e == 0 and cur_l == (day - d) % 23:
return day - dd
return -1
if __name__ == '__main__':
case_num = 0
while True:
case_num += 1
try:
p, i, e, d = map(int, input().split())
dp, di, de, dl, dd = map(int, input().split())
max_day = dp * di * de * 23
if max_day > 365:
max_day = 365
print("Case %d: " % case_num, end="")
peak_day = find_peak_day(p, i, e, d, dp, di, de, dl, dd, max_day)
if peak_day == -1:
print("No such days.")
else:
print(peak_day)
except:
break
```
首先读入输入数据,然后调用 `find_peak_day` 函数查找第一个巅峰日距离给定日期 `dd` 的天数,最后输出结果。
`find_peak_day` 函数用于枚举从 `dd` 到 `max_day` 中的每一天,并计算该天的体力、智商、情商和运气是否达到高峰。如果找到了一个满足条件的日期,就返回该日期距离给定日期 `dd` 的天数。如果所有日期都不满足条件,则返回 `-1`。
注意:由于题目中规定最大周期不超过 50,因此 `dp * di * de * 23` 不会超过 365,可以用作 `max_day`。如果 `max_day` 大于 365,需要将其设为 365。
完整代码见上。
阅读全文