poj 1008

来源:互联网 发布:海岛奇兵震爆弹数据 编辑:程序博客网 时间:2024/06/03 20:13

题目概述:

有两种历法,Haab历和Tzolkin历

Haab历一年19个月,前18个月都是20天,每个月名称依次为pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu,最后一个月5天,名称为uayet,每个月第一天是0日,最后一天是19日或4日,历法元年为0年

Tzolkin历一年有260天,一天以时期和编号二者确定,有13个时期,名称为imix, ik, akbal, kan, chicchan, cimi, manik, lamat, muluk, ok, chuen, eb, ben, ix, mem, cib, caban, eznab, canac, ahau,编号从1到20,从每年第一天(1 imix)开始,每天编号和时期都会递增到下一个,当到达末尾时会循环回首个名称/编号,历法元年为0年

输入:

第一行times,其后每行一个Haab历法表示的日期,以%dd%,%m%,%yy%表示日,月,年,则格式为

%dd%. %m% %yy%

注意%dd%后有一个点

输入有times组

限制:

年<5000

输出:

第一行一个整数times,其后每行一个字符串,对应Tzolkin历日期,以%ddd%,%mmmm%,%yyy%表示编号,时期,年,则格式为

%ddd% %mmmm% %yyy%

注意没有点号

多组输入之间没有空行

样例输入:

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

样例输出:

3
3 chuen 0
1 imix 0
9 cimi 2801

讨论:

其实就是个计算题,不过扯上字符串就变得很烦人了,利用map和数组下标性质,还是个计算题

由于5天的特殊月在最后一个月,因此完全不影响计算

另外这里cin和printf混用了,但这两个并不影响

题解状态:

252K,0MS,C++,1315B

#include<algorithm>  #include<string.h>  #include<stdio.h>  #include<iostream>#include<map>#include<string>using namespace std;#define INF 0x3f3f3f3f  #define maxx(a,b) ((a)>(b)?(a):(b))  #define minn(a,b) ((a)<(b)?(a):(b))  #define MAXN 105map<string, int>months;char months2[20][10] = { "imix","ik","akbal","kan","chicchan","cimi","manik","lamat","muluk","ok","chuen","eb","ben","ix","mem","cib","caban","eznab","canac","ahau" };void fun(){int dd, mm, yy;char c;//放多余的点号string m;cin >> dd >> c >> m >> yy;//input//不知道scanf可否用string,于是用cinmm = months[m];//利用map还原为数字int days = 0;days += yy * 365 + mm * 20 + dd;//计算出过去多少天,这两行的状况只是意外,没有特殊含义int ddd, mmm, yyy;yyy = days / 260;days %= 260;mmm = days % 20;ddd = days % 13 + 1;//需要注意编号从1开始printf("%d %s %d\n", ddd, months2[mmm], yyy);}int main(void){//freopen("vs_cin.txt", "r", stdin);//freopen("vs_cout.txt", "w", stdout);months["pop"] = 0;months["no"] = 1;months["zip"] = 2;months["zotz"] = 3;months["tzec"] = 4;months["xul"] = 5;months["yoxkin"] = 6;months["mol"] = 7;months["chen"] = 8;months["yax"] = 9;months["zac"] = 10;months["ceh"] = 11;months["mac"] = 12;months["kankin"] = 13;months["muan"] = 14;months["pax"] = 15;months["koyab"] = 16;months["cumhu"] = 17;months["uayet"] = 18;//可以看到月份都减一了,因为月份记录已经完整经过的月数int times;cin >> times;//inputprintf("%d\n", times);//outputwhile (times--) {fun();}}

EOF

0 0
原创粉丝点击