您的位置:首页 > 其它

[POJ_1008]Maya Calendar

2011-08-24 16:34 537 查看
#include <iostream>
#include <string>
#include <list>
#include <map>
using namespace std;

string maya_month[] =
{
"pop", "no", "zip", "zotz", "tzec", "xul", "yoxkin", "mol",
"chen", "yax", "zac", "ceh", "mac", "kankin", "muan", "pax",
"koyab", "cumhu", "uayet"
};

string tzolkin_day[] =
{
"imix", "ik", "akbal", "kan", "chicchan", "cimi", "manik",
"lamat", "muluk", "ok", "chuen", "eb", "ben", "ix", "mem",
"cib", "caban", "eznab", "canac", "ahau"
};

struct Date
{
int year, month, day;
};

map<string, int> maya_month_table;
list<Date> date_list;

void build_tables()
{
for (int i=0; i<19; i++)
{
maya_month_table[maya_month[i]] = i;
}
}

void parse_maya_date(int year, int month, int day)
{
int total_days = 0;
total_days += year * 365;
total_days += month * 20;
total_days += day;

// which year?
int tyear = total_days / 260;
int tname = (total_days % 20);
int tday = (total_days % 13);

cout << (tday+1) << " " << tzolkin_day[tname] << " " << tyear << endl;
}

int get_maya_day(string day_name)
{
int len = day_name.length();
int base = 1;
int sum = 0;
for (int i=len-2; i>=0; i--)
{
sum = (day_name.at(i) - '0') * base;
base *= 10;
}

return sum;
}

int main()
{
int count;
cin >> count;

build_tables();
for (int i=0; i<count; i++)
{
Date date;
string day_name;
string month_name;

cin >> day_name;
cin >> month_name;
cin >> date.year;

date.month = maya_month_table[month_name];
date.day = get_maya_day(day_name);
date_list.push_back(date);
}

cout << count << endl;
for (list<Date>::iterator iter = date_list.begin();
iter != date_list.end(); ++iter)
{
parse_maya_date(iter->year, iter->month, iter->day);
}
return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: