POJ1008 Maya Calendar

題目來源:http://poj.org/problem?id=1008ios

題目大意:算法

  Maya人認爲一年有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,這個月只有五天,編號爲0,1,2,3,4.Maya人認爲這個月是不吉利的。ide

  還有一種舊的日曆,叫作Tzolkin,這種日曆中一年被分爲13個週期,每一個20天長,天天由一個數和一個名字來表示。公郵20個名字: imix, ik, akbal, kan, chicchan, cimi, manik, lamat, muluk, ok, chuen, eb, ben, ix, mem, cib, caban, eznab, canac, ahau, 和13和數字。它們都是週期性循環的。this

  例如每一年開始的日期表示以下:spa

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 . . . code

年號被表示爲0,1,...其中0是世界的開始。因此世界的第一天能夠表示爲:blog

Haab: 0. pop 0 
Tzolkin: 1 imix 0 
ip

程序的目標是將Haab日曆表示的日期轉換爲Tzolkin日曆的表示。ci

輸入:Haab日曆的輸入格式爲:NumberOfTheDay. Month Yearrem

輸入的第一行爲一個正整數n,指明有多少個待轉換的日期。後接n行,每行一個Haab日期。年數都小於5000.

輸出:Tzolkin日曆的輸出格式爲:Number NameOfTheDay Year 

輸出的第一行爲一個正整數n,指明日期數。後接n行,每行一個轉換後的日期。輸出順序與輸入順序一致。


Sample Input

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

Sample Output

3
3 chuen 0
1 imix 0
9 cimi 2801

本題沒有什麼算法上的難度,關鍵就是細心。當心處理數值的運算,留心不要拼錯單詞。我用的是C++ STL的map。

  1 //////////////////////////////////////////////////////////////////////////
  2 //        POJ1008 Maya Calendar
  3 //        Memory: 308K        Time: 0MS
  4 //        Language: C++        Result: Accepted
  5 //////////////////////////////////////////////////////////////////////////
  6 
  7 
  8 # include <iostream>
  9 # include <string>
 10 # include <map>
 11 
 12 using namespace std;
 13 
 14 class dateH {
 15 public:    
 16     int date;
 17     int month;
 18     int year;
 19 
 20     dateH (int date, int month, int year) {
 21         this->date = date;
 22         this->month = month;
 23         this->year = year;
 24     }
 25     long getCount () {
 26         return 365 * year +  20 * (month - 1)   + date + 1;
 27     }
 28 };
 29 
 30 class dateT {
 31 public:
 32     int num;
 33     int count;
 34     int year;
 35 
 36     dateT(long count) {
 37         year = (count % 260) ? count / 260 : count / 260 - 1 ;
 38         int remain = count - year * 260;
 39         this -> count = (remain % 20)  ? (remain % 20) : 20;
 40         num = (remain % 13) ? (remain % 13) : 13;
 41     }
 42     int getNum () {
 43         return num;
 44     }
 45     int getCount () {
 46         return count;
 47     }
 48     int getYear () {
 49         return year;
 50     }
 51 };
 52 
 53 int main(void) {
 54     int n;
 55     cin >> n;
 56     if (n <= 0) {
 57         return 0;
 58     }
 59     cout << n << endl;
 60     map<string, int> Haab;
 61     map<int, string> Tzolkin;
 62 
 63     map<string, int>::iterator itH;
 64     map<int, string>::iterator itT;
 65 
 66     Haab.insert(pair<string, int>("pop", 1));
 67     Haab.insert(pair<string, int>("no",2));
 68     Haab.insert(pair<string, int>("zip", 3));
 69     Haab.insert(pair<string, int>("zotz", 4));
 70     Haab.insert(pair<string, int>("tzec", 5));
 71     Haab.insert(pair<string, int>("xul", 6));
 72     Haab.insert(pair<string, int>("yoxkin", 7));
 73     Haab.insert(pair<string, int>("mol", 8));
 74     Haab.insert(pair<string, int>("chen", 9));
 75     Haab.insert(pair<string, int>("yax", 10));
 76     Haab.insert(pair<string, int>("zac", 11));
 77     Haab.insert(pair<string, int>("ceh", 12));
 78     Haab.insert(pair<string, int>("mac", 13));
 79     Haab.insert(pair<string, int>("kankin", 14));
 80     Haab.insert(pair<string, int>("muan", 15));
 81     Haab.insert(pair<string, int>("pax", 16));
 82     Haab.insert(pair<string, int>("koyab", 17));
 83     Haab.insert(pair<string, int>("cumhu", 18));
 84     Haab.insert(pair<string, int>("uayet", 19));
 85 
 86     Tzolkin.insert(pair<int, string>(1, "imix"));
 87     Tzolkin.insert(pair<int, string>(2, "ik"));
 88     Tzolkin.insert(pair<int, string>(3, "akbal"));
 89     Tzolkin.insert(pair<int, string>(4, "kan"));
 90     Tzolkin.insert(pair<int, string>(5, "chicchan"));
 91     Tzolkin.insert(pair<int, string>(6, "cimi"));
 92     Tzolkin.insert(pair<int, string>(7, "manik"));
 93     Tzolkin.insert(pair<int, string>(8, "lamat"));
 94     Tzolkin.insert(pair<int, string>(9, "muluk"));
 95     Tzolkin.insert(pair<int, string>(10, "ok"));
 96     Tzolkin.insert(pair<int, string>(11, "chuen"));
 97     Tzolkin.insert(pair<int, string>(12, "eb"));
 98     Tzolkin.insert(pair<int, string>(13, "ben"));
 99     Tzolkin.insert(pair<int, string>(14, "ix"));
100     Tzolkin.insert(pair<int, string>(15, "mem"));
101     Tzolkin.insert(pair<int, string>(16, "cib"));
102     Tzolkin.insert(pair<int, string>(17, "caban"));
103     Tzolkin.insert(pair<int, string>(18, "eznab"));
104     Tzolkin.insert(pair<int, string>(19, "canac"));
105     Tzolkin.insert(pair<int, string>(20, "ahau"));
106 
107     int date;
108     int year;
109     string month;
110     for (int i = 0; i < n; i++) {
111         char t;
112         cin >> date >> t >> month >> year;
113         int m = (*Haab.find(month)).second;
114         dateH dateh (date, m, year);
115         long count = dateh.getCount();
116         dateT datet (count);
117         cout << datet.getNum() << " " 
118             << (*Tzolkin.find(datet.getCount())).second << " " 
119             << datet.getYear() << endl;
120     }
121 
122     system("pause");
123     return 0;
124 }
View Code
相關文章
相關標籤/搜索