POJ 1008. Maya Calendar

POJ 1008. Maya Calendar

试题链接:POJ 1008

本题关键是要推出Haab历法和Tzolkin历法之间的转换关系。

设在Haab历法下,该天在该月的编号为 D H D_H DH,月份为 M H M_H MH,年份为 Y H Y_H YH,即日期表示为
D H . M H Y H D_H. M_H Y_H DH.MHYH
这里 Y H = 0 , 1 , 2 , ⋯ Y_H = 0, 1, 2, \cdots YH=0,1,2, M H = 0 , 1 , ⋯   , 18 M_H = 0, 1, \cdots, 18 MH=0,1,,18,当 M H = 0 , 1 , ⋯   , 17 M_H = 0, 1, \cdots, 17 MH=0,1,,17时, D H = 0 , 1 , ⋯   , 19 D_H = 0, 1, \cdots, 19 DH=0,1,,19;而当 M H = 19 M_H = 19 MH=19时, D H = 0 , 1 , 2 , 3 , 4 D_H = 0, 1, 2, 3, 4 DH=0,1,2,3,4

设在Tzolkin历法下,编号为 N T N_T NT,该天的名称为 D T D_T DT,年份为 Y T Y_T YT,则日期表示为
N T D T Y T N_T D_T Y_T NTDTYT
这里, N T = 1 , 2 , ⋯   , 13 N_T = 1, 2, \cdots, 13 NT=1,2,,13 D T = 0 , 1 , ⋯   , 19 D_T = 0, 1, \cdots, 19 DT=0,1,,19 Y T = 0 , 1 , ⋯ Y_T = 0, 1, \cdots YT=0,1,

接着设从第一天(the first day)到给定日期之间的总天数为 S S S,则有
S = 365 Y H + 20 M H + D H S = 365 Y_H + 20 M_H + D_H S=365YH+20MH+DH
于是,可得
N T = S % 13 + 1 D T = S % 20 Y T = S / / ( 13 × 20 ) \begin{aligned} N_T &= S \% 13 + 1 \\ D_T &= S \% 20 \\ Y_T &= S // (13\times20) \end{aligned} NTDTYT=S%13+1=S%20=S//(13×20)

剩下的只要再做一些数字同名称的映射即可。

代码如下:

#include <stdio.h>
#include <iostream>
#include <map>
#include <string>

using namespace std;

const map<string, int>::value_type init_Haab_month[] = {
        map<string, int>::value_type("pop", 0),
        map<string, int>::value_type("no", 1),
        map<string, int>::value_type("zip", 2),
        map<string, int>::value_type("zotz", 3),
        map<string, int>::value_type("tzec", 4),
        map<string, int>::value_type("xul", 5),
        map<string, int>::value_type("yoxkin", 6),
        map<string, int>::value_type("mol", 7),
        map<string, int>::value_type("chen", 8),
        map<string, int>::value_type("yax", 9),
        map<string, int>::value_type("zac", 10),
        map<string, int>::value_type("ceh", 11),
        map<string, int>::value_type("mac", 12),
        map<string, int>::value_type("kankin", 13),
        map<string, int>::value_type("muan", 14),
        map<string, int>::value_type("pax", 15),
        map<string, int>::value_type("koyab", 16),
        map<string, int>::value_type("cumhu", 17),
        map<string, int>::value_type("uayet", 18)
};
static map<string, int> Haab_month_map(init_Haab_month, init_Haab_month+19);

const map<int, string>::value_type init_Tzolkin_day[] = {
        map<int, string>::value_type(0, "imix"),
        map<int, string>::value_type(1, "ik"),
        map<int, string>::value_type(2, "akbal"),
        map<int, string>::value_type(3, "kan"),
        map<int, string>::value_type(4, "chicchan"),
        map<int, string>::value_type(5, "cimi"),
        map<int, string>::value_type(6, "manik"),
        map<int, string>::value_type(7, "lamat"),
        map<int, string>::value_type(8, "muluk"),
        map<int, string>::value_type(9, "ok"),
        map<int, string>::value_type(10, "chuen"),
        map<int, string>::value_type(11, "eb"),
        map<int, string>::value_type(12, "ben"),
        map<int, string>::value_type(13, "ix"),
        map<int, string>::value_type(14, "mem"),
        map<int, string>::value_type(15, "cib"),
        map<int, string>::value_type(16, "caban"),
        map<int, string>::value_type(17, "eznab"),
        map<int, string>::value_type(18, "canac"),
        map<int, string>::value_type(19, "ahau")
};
static map<int, string> Tzolkin_day_map(init_Tzolkin_day, init_Tzolkin_day+20);

int main()
{
    int n;
    int Haab_number_of_the_day;
    string Haab_month_name;
    int Haab_month;
    int Haab_year;
    int Tzolkin_number;
    int Tzolkin_day;
    string Tzolkin_name_of_the_day;
    int Tzolkin_year;
    int total_day;      // number of days from the first day

    scanf("%d", &n);
    printf("%d\n", n);
    while (n--)
    {
        cin >> Haab_number_of_the_day;
        cin.ignore(1);      // ignore the dot '.'
        cin >> Haab_month_name >> Haab_year;

        Haab_month = Haab_month_map[Haab_month_name];
        total_day = 365 * Haab_year + Haab_month * 20 + Haab_number_of_the_day;

        Tzolkin_number = total_day % 13 + 1;
        Tzolkin_day = total_day % 20;
        Tzolkin_name_of_the_day = Tzolkin_day_map[Tzolkin_day];
        Tzolkin_year = total_day / (13 * 20);

        cout << Tzolkin_number << " " << Tzolkin_name_of_the_day << " " << Tzolkin_year << endl;
    }

    return 0;
}
内容概要:《2024年中国物联网产业创新白皮书》由深圳市物联网产业协会与AIoT星图研究院联合编制,汇集了全国30多个省市物联网组织的智慧。白皮书系统梳理了中国物联网产业的发展历程、现状及未来趋势,涵盖了物联网的概念、产业结构、市场规模、投融资情况、面临的问题与机遇。书中详细分析了感知层、传输层、平台层及应用层的关键技术,探讨了智慧城市、智能工业、车联网、智慧医疗等九大产业物联网应用领域,以及消费物联网的发展特征与热门单品。此外,白皮书还关注了物联网数据安全、法规遵从、人才短缺等挑战,并提出了相应的解决方案。 适用人群:物联网从业者、企业决策者、政策制定者及相关研究机构。 使用场景及目标:①帮助从业者深入了解物联网产业的现状和发展趋势;②为企业决策者提供战略规划依据;③为政策制定者提供政策支持和法规制定参考;④为研究机构提供详尽的数据和案例支持。 其他说明:白皮书不仅限于技术科普,更从宏观角度结合市场情况,多维度讨论了物联网产业生态,旨在为物联网企业、从业者找到最适合的技术应用场景,促进产业健康发展。报告还特别鸣谢了参与市场调研的企业,感谢他们提供的宝贵行业信息。由于时间和资源的限制,报告可能存在信息不充分之处,欢迎各界人士提出宝贵意见。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值