百练 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] = {pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu,uayet};//0-19
17 int hadd_days_of_month[HAAB_MONTH_NUM] = {20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,5};
18
19 char holly_day_names[HOLLY_DAY_NAME_NUM][10] = {imix, ik, akbal, kan, chicchan, cimi, manik, t, muluk, ok, chuen, eb, ben, ix, mem, cib, caban, eznab, canac, ahau};
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 for(int 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历
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] = {pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu,uayet};//0-19
17 int hadd_days_of_month[HAAB_MONTH_NUM] = {20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,5};
18
19 char holly_day_names[HOLLY_DAY_NAME_NUM][10] = {imix, ik, akbal, kan, chicchan, cimi, manik, t, muluk, ok, chuen, eb, ben, ix, mem, cib, caban, eznab, canac, ahau};
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 for(int 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历