poj1008

来源:互联网 发布:淘宝网上哪家金鱼好 编辑:程序博客网 时间:2024/05/19 14:37

不知道是win10的原因还是poj上人太多了 今天这poj卡到我不要不要的

看这题目 玛雅人有两个日历 一个是haab另外一个是tzolkin

haab这个东西就类似于我们正常的月份 而tzolkin有点类似于我天朝的天干地支这种

然后题目给了你月份的名称 让你把haab转化成tzolkin

我最初的构想是这样的 把每一天的信息都储存下来 因为year不大于5k 所以5k*365是可以应付过来的

然后痛苦的事情就来了 交上去超内存了 再改改就runtime error

下面说一个完整的思路

题目给你haab 最容易算的是这个haab日期对应的是第几天

所以先求这个天数n

然后n/260 这样可以求出year就是第几年(当然这里的n是从第0天开始)

剩下的n%260就是这一年中的第几天(也是从0开始)

然后就可以对应一下这一天的tzolkin日期了

然而这样还是错

因为输出的时候要有一开始的case数

改一下格式就好了

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<string>
using namespace std;
map<string,int>mymap;
int tzolkin[261][2];
char holly[20][10]={"imix","ik","akbal","kan","chicchan","cimi","manik","lamat","muluk","ok","chuen","eb","ben","ix","mem","cib","caban","eznab","canac","ahau"};
void init(){
    mymap.clear();
    mymap["pop"]=0;
    mymap["no"]=1;
    mymap["zip"]=2;
    mymap["zotz"]=3;
    mymap["tzec"]=4;
    mymap["xul"]=5;
    mymap["yoxkin"]=6;
    mymap["mol"]=7;
    mymap["chen"]=8;
    mymap["yax"]=9;
    mymap["zac"]=10;
    mymap["ceh"]=11;
    mymap["mac"]=12;
    mymap["kankin"]=13;
    mymap["muan"]=14;
    mymap["pax"]=15;
    mymap["koyab"]=16;
    mymap["cumhu"]=17;
    mymap["uayet"]=18;
    int dx=1,dy=1;
    for(int i=1;i<=260;i++){
        tzolkin[i][0]=dx++;
        tzolkin[i][1]=dy++;
        if(dx==14){
            dx=1;
        }
        if(dy==21){
            dy=1;
        }
    }
}
int main(){
    init();
    int T;
    cin>>T;
    cout<<T<<endl;
    while(T--){
        int day;
        int a,b;
        char str[10];
        scanf("%d.%s%d",&a,&str,&b);
        if(mymap[str]==18){
            day=360+a+b*365;
        }
        else{
            day=mymap[str]*20+a+b*365;
        }
        cout<<tzolkin[day%260+1][0]<<" "<<holly[tzolkin[day%260+1][1]-1]<<" "<<day/260<<endl;
    }
    return 0;
}

0 0