zoukankan      html  css  js  c++  java
  • POJ1008 Maya Calendar

    题目来源:http://poj.org/problem?id=1008

    题目大意:

      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人认为这个月是不吉利的。

      还有一种旧的日历,叫做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和数字。它们都是周期性循环的。

      例如每年开始的日期表示如下:

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

    年号被表示为0,1,...其中0是世界的开始。所以世界的第一天可以表示为:

    Haab: 0. pop 0 
    Tzolkin: 1 imix 0 

    程序的目标是将Haab日历表示的日期转换为Tzolkin日历的表示。

    输入:Haab日历的输入格式为:NumberOfTheDay. Month Year

    输入的第一行为一个正整数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
  • 相关阅读:
    JAVA实验3 类与对象
    多种排序功能的实现
    (数据结构)HashTable的实现
    对string型变量的频率统计(文章单词检索)
    对int型变量的频率统计
    二叉搜索树中序迭代器的实现
    二叉搜索树的实现
    Prim最小生成树
    Kruscal最小生成树
    算法分析实践大作业
  • 原文地址:https://www.cnblogs.com/dengeven/p/3226438.html
Copyright © 2011-2022 走看看