玛雅历

GitHub跳转原题关系图返回列表

将 Haab 日期换算为总天数,再按 Tzolkin 的 13、20、260 周期取模。

OJ: noi_openjudge

题目 ID: ch0113-07

难度:普及-

标签:模拟日期映射python

日期: 2026-07-30 23:01

题意

把 Haab 历日期转换为 Tzolkin 历日期。

思路

建立 Haab 月名到编号的映射,先算从世界开始经过的总天数。Tzolkin 的数字周期为 13、名称周期为 20、年份周期为 13×20=26013\times20=260,因此分别取模和整除即可。

代码

Python代码

python
haab_months = ["pop", "no", "zip", "zotz", "tzec", "xul", "yoxkin", "mol", "chen", "yax", "zac", "ceh", "mac", "kankin", "muan", "pax", "koyab", "cumhu", "uayet"]
tzolkin_days = ["imix", "ik", "akbal", "kan", "chicchan", "cimi", "manik", "lamat", "muluk", "ok", "chuen", "eb", "ben", "ix", "mem", "cib", "caban", "eznab", "canac", "ahau"]
month_index = {month: index for index, month in enumerate(haab_months)}

count = int(input())
print(count)
for _ in range(count):
    day, month, year = input().split()
    total_days = int(year) * 365 + month_index[month] * 20 + int(day[:-1])
    print(total_days % 13 + 1, tzolkin_days[total_days % 20], total_days // 260)

复杂度

每个日期时间复杂度和额外空间复杂度均为 O(1)O(1)

总结

跨历法转换的核心是先统一到从起点开始的总天数。