百练 2965 玛雅历 解题呈报

    添加时间:2013-6-25 点击量:

    1.链接:http://poj.grids.cn/practice/2965/


    2.题目:


    总时候限制:
    1000ms
    内存限制:
    65536kB
    描述
    上周末,M.A. Ya传授对古老的玛雅有了一个重大发明。从一个古老的节绳(玛雅人用于记事的对象)中,传授发明玛雅人应用了一个一年有365天的叫做Haab的历法。这 个Haab历法拥有19个月,在开端的18个月,一个月有20天,月份的名字分别是pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu。这些月份中的日期用0到19默示。Haab历的最后一个月叫做uayet,它只有5天,用0到4默示。玛雅人认为这个日期起码的月份是不吉利 的,在这个月法庭不开庭,人们不从事交易,甚至没有人清除屋中的地板。


    因为宗教的原因,玛雅人还应用了另一个历法,在这个历法中年被称为Tzolkin(holly年),一年被分成13个不合的时代,每个时代有20天,每一
    天用一个数字和一个单词相组合的情势来默示。应用的数字是1~13,应用的单词共有20个,它们分别是:imix, ik, akbal, kan,
    chicchan, cimi, manik, t, muluk, ok, chuen, eb, ben, ix, mem, cib,
    caban, eznab, canac, ahau。重视:年中的每一天都有着明白独一的描述,比如,在一年的开端,日期如下描述: 1 imix, 2
    ik, 3 akbal, 4 kan, 5 chicchan, 6 cimi, 7 manik, 8 t, 9 muluk, 10
    ok, 11 chuen, 12 eb, 13 ben, 1 ix, 2 mem, 3 cib, 4 caban, 5 eznab, 6
    canac, 7 ahau, ,8 imix, 9 ik, 10 akbal ……也就是说数字和单词各自自力轮回应用。

    Haab历和Tzolkin历中的年都用数字0,1,……默示,数字0默示世界的开端。所以第一天被默示成:
    Haab: 0. pop 0
    Tzolkin: 1 imix 0
    请帮助M.A. Ya传授写一个法度可以把Haab历转化成Tzolkin历。
    输入
    Haab历中的数据由如下的体式格式默示:
    日期. 月份 年数

    输入中的第一行默示要转化的Haab历日期的数据量。下面的每一行默示一个日期,年数小于5000。
    输出
    Tzolkin历中的数据由如下的体式格式默示:
    天数字 天名称 年数

    第一行默示输出的日期数量。下面的每一行默示一个输入数据中对应的Tzolkin历中的日期。
    样例输入

    3
    
    10. zac 0
    0. pop 0
    10. zac 1995

    样例输出

    3
    
    3 chuen 0
    1 imix 0
    9 cimi 2801


    3.代码:



     1 #include <iostream>
    
    2 #include <cstdio>
    3 #include <cstdlib>
    4 #include <cstring>
    5
    6 #define HAAB_MONTH_NUM 19
    7 #define HAAB_DAYS_OF_YEAR 365
    8 #define HADD_NORMAL_DAYS_OF_MONTH 20
    9
    10
    11 #define HOLLY_DAY_NAME_NUM 20
    12 #define HOLLY_DAY_NUM_NUM 13
    13
    14 using namespace std;
    15
    16 char haad_months[HAAB_MONTH_NUM][10] = {popnozipzotztzecxulyoxkinmolchenyaxzaccehmackankinmuanpaxkoyabcumhuuayet};//0-19
    17 int hadd_days_of_month[HAAB_MONTH_NUM] = {2020202020202020202020202020202020205};
    18
    19 char holly_day_names[HOLLY_DAY_NAME_NUM][10] = {imixikakbalkanchicchancimimaniktmulukokchuenebbenixmemcibcabaneznabcanacahau};
    20
    21
    22 int main()
    23 {
    24 int n;
    25 cin>>n;
    26 cout<<n<<endl;
    27
    28 int day,year;
    29 char month[20];
    30 int m_days;
    31 int year1,day_num,day_name;
    32 while(n--
    33 {
    34 scanf(%d. %s%d,&day,month,&year);
    35
    36 //count days
    37 m_days = 0;
    38 m_days += HAAB_DAYS_OF_YEAR year;
    39
    40 forint i = 0; i < HAAB_MONTH_NUM; i++
    41 {
    42 if(!strcmp(month,haad_months[i]))
    43 {
    44 m_days += i HADD_NORMAL_DAYS_OF_MONTH;
    45 break;
    46 }
    47 }
    48
    49 m_days += day;
    50
    51 year1 = m_days / (HOLLY_DAY_NAME_NUM HOLLY_DAY_NUM_NUM);
    52 //m_days -= year1 (HOLLY_DAY_NAME_NUM HOLLY_DAY_NUM_NUM);
    53 day_num = m_days % HOLLY_DAY_NUM_NUM;
    54 day_name = m_days % HOLLY_DAY_NAME_NUM;
    55 cout<<(day_num+1)<< <<holly_day_names[day_name]<< <<year1<<endl;
    56
    57 }
    58 return 0;
    59 }


    4.思路:


    (1)题目描述很错杂,须要警惕


    (2)先策画经过了几许天,然后在求holly历

    分享到: