前言

传送门

正文


参考题解

#include<iostream>
#include<algorithm>
#include<string>
#include<map> 
using namespace std;
/* 题意: 将地球数字和火星数字相互翻译 思路:刚开始想直接根据输入进行模拟,后面发现太麻烦了,之后发现 数据范围不超过169,故直接进行打表即可。 注意点: 对于13的倍数,不需要输出个位的tret! */
string digit[13]={"tret","jan","feb","mar","apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"}; //个位 
string highDigit[13]={"tret","tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};//十位 
string numToStr[170];//地球数字映射火星数字
map<string,int> strToNum;//火星数字映射地球数字 
void init(){
	for(int i=0;i<13;i++){
		//个位
		numToStr[i]=digit[i];
		strToNum[digit[i]]=i;
		//十位 
		numToStr[i*13]=highDigit[i];
		strToNum[highDigit[i]]=i*13;
	}

	//十位+个位
	for(int i=1;i<13;i++){//这里注意从1开始,因为对于13的倍数,不需要输出个位的tret(易错) 
		for(int j=1;j<13;j++){
			string str=highDigit[i]+" "+digit[j];
			numToStr[i*13+j]=str;
			strToNum[str]=i*13+j;	
		}
	} 
}
int main(){
	init();
	int n; 
	string str; 
	cin>>n;
	char ch;
	cin.get(ch);
	while(n--){
		getline(cin,str);
		if(str[0]>='0'&str[0]<='9'){//地球数字 
			cout<<numToStr[stoi(str)]<<endl;
		}else{
			cout<<strToNum[str]<<endl;
		}
	} 
	return 0;
}