poj1008(Maya Calendar)
完整题意(摘录与百度贴吧): 在他的最近的一次休假期间,博士M.A.Ya有了一个惊人的发现,是关于一个古老玛亚日历。 来自一个很老的信息,教授发现,这个玛亚文明使用了一个365天长的一年,叫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,1,2,3,4指定。 这些玛亚人相信,这个月是没有好运气的,在这一段时间里,正确的事不存在,贸易停止了,人们连地都不扫。 为了宗教的目的,在这一年中,这些玛亚人使用了其它的日历,这种年被称为Tzolkin(holly年)。 这个年被分进十三个时期中,每一个20天长。每一天由一个数字和这天的名字一起表示。它们用20个名字: imix,ik,akbal,kan,chicchan,cimi,manik,lamat,muluk,ok, chuen,eb,ben,ix,mem,cib,caban,eznab,Canac,ahau 和 数字(1~13)一起在一个20天月的周期里成对表示一天。 注意:每一天有一个清楚的描述。举个例子,在这一年所有天的最开始的一天 被描述成以下: 1 imix, 2 ik, 3 akbal, 4 kan, 5 chicchan, 6 cimi, 7 manik, 8 lamat, 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 (Haab年:第0天,pop天名,第0年) · Tzolkin: 1 imix 0 (Tzolkin年:第0天,imix天名,第0年) 帮助教授M.A.Ya写一个程序,给他转换日期, 从Haab日历转换成Tzolkin日历。 Input 在下列格式中,Haab年里的日期被给予: 天的编号. 月 年 在输入里,输入的第一行包含这些输入日期的一个数目。 下一行在Haab日历格式里,包含n个日期,它们的每一个在每个隔行中的。这个年小于5000。 Output 在下面的格式中,在Tzolkin里的日期将是。 编号 天的名字 年 输出的第一行包含这些输出日期的数目。 在下面n行里,这些是在Tzolkin日历格式里的日期,在这个顺序里,对应着输入的那些日期。上面的题目那么长又不想细看,那我就帮忙简述一下吧 ^-^ …题意就是有两种日历: 1、一年365天,19个月。前18个月每月20天,第十九月5天。(每个月都有一个英文名) 2、一年260天,13个月,每月20天。(这260天每一天都有一个名字(由数字0~13和20个字符组合而成)(。。这不由让我想起了天干地支纪年法qaq)) ——然后给出日历1的年月日,输出日历2对应的年月日
思路很简单:日历1算出对应的总天数,然后转化到日历2。接着强势模拟一波,出来咯^.^
#include <iostream> #include <cstdio> #include <cstring> #include <string> using namespace std; const int maxn = 5005; string Haab[20] = {"/","pop", "no", "zip", "zotz", "tzec", "xul", "yoxkin", "mol", "chen", "yax", "zac", "ceh", "mac", "kankin", "muan", "pax", "koyab", "cumhu", "uayet"}; string Tzolkin[20] = {"imix", "ik", "akbal", "kan", "chicchan", "cimi", "manik", "lamat", "muluk", "ok", "chuen", "eb", "ben", "ix", "mem", "cib", "caban", "eznab", "canac", "ahau"}; int main() { int tt; scanf("%d",&tt); printf("%d\n",tt); while(tt--){ int a, b; string c; scanf("%d. ",&a); cin>>c; scanf(" %d",&b); int pos = 0; for (int i = 1; i < 20; i++){ if(c == Haab[i]){ pos = i; break; } } int tot = b*365 + (pos-1)*20 + a; int x = tot/260; int y = tot%260; int y1 = y%13+1; int y2 = y%20; printf("%d ",y1); cout<<Tzolkin[y2]; printf(" %d\n",x); } return 0; }