poj1008

不知道是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
#include
#include
#include
#include
#include
using namespace std;
mapmymap;
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<     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<     }
    return 0;
}

你可能感兴趣的:(poj,poj)