SP9529 MAYCA - Maya Calendar 题解

· · 题解

玄学。

说实话不理解为什么评黄,这么水的模拟题。

思路

其实就是要实现 2 种历法之间的转换,首先将输入的 a 历法的年份转化成以天为单位的数,然后再根据进率转换成 b 历法的数。

这里可以偷懒列个表。

代码

#include <iostream>
#include <cstdio>
#include <cstring>
#define int long long
using namespace std;
#define f(W, X, Y, Z) for(int W = X; W <= Y; W += Z)
#define F(W, X, Y, Z) for(int W = X; W >= Y; W -= Z)
#define debug puts("QAQ")
string a[20]={"pop", "no", "zip", "zotz", "tzec", "xul", "yoxkin", "mol", "chen", "yax", "zac", "ceh", "mac", "kankin", "muan", "pax", "koyab", "cumhu", "uayet"};//这里不能是char数组,不然会玄学WA
char b[20][20]={"imix","ik", "akbal", "kan", "chicchan", "cimi", "manik", "lamat", "muluk", "ok", "chuen", "eb", "ben", "ix", "mem", "cib", "caban", "eznab", "canac", "ahau"};
signed main(){
    int T;
    scanf("%lld", &T);
    printf("%lld\n", T);
    while(T--){
        int day, month, year;
        scanf("%lld.", &day);
        string MONTH;
        cin >> MONTH;
        scanf("%lld", &year);
        f(i, 0, 18, 1){
            if(a[i] == MONTH){
                month = i;//找到该月对应的数字
                break;
            }
        }
        int all = year * 365 + month * 20 + day;//计算天数
        printf("%lld %s %lld\n", all % 13 + 1, b[all % 20], all / 260);//转化到b历法
    }
    return 0;
}