题目
pata1054
题目思路
建议一个从long long到int的map容器用以记录数字次数即可。
参考代码
#include<iostream>
#include<map>
#include<string>
using namespace std;
void pt1(string s1, map<int,string> ma1,map<int,string> ma2);
void pt2(string s1, map<string,int> ma1,map<string,int> ma2);
int main()
{
int m=0;
string schu;
string s1[13]={"tret","jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};
string s2[12]={"tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};
map<string,int> m1;
map<string,int> m2;
map<int,string> m3;
map<int,string> m4;
for(int i=0;i<13;i++)
{
m1[s1[i]]=i;
m3[i]=s1[i];
}
for(int i=0;i<12;i++)
{
m2[s2[i]]=i+1;
m4[i+1]=s2[i];
}
scanf("%d\n",&m);
for(int i=0;i<m;i++)
{
getline(cin,schu);
if(schu[0]>='0'&&schu[0]<='9')
pt1(schu,m3,m4);
else
pt2(schu,m1,m2);
if(i<m-1)
printf("\n");
}
return 0;
}
void pt1(string s1, map<int,string> ma1,map<int,string> ma2)//数字转化为其他
{
int t=s1.length();
int a=0,p=1;
while(t>0)
{
a+=(s1[t-1]-'0')*p;
p*=10;
t--;
}
if(a>12)
{
cout<<ma2[a/13];
if(a%13!=0)
printf(" ");
}
if(a==0||a%13!=0)
cout<<ma1[a%13];
}
void pt2(string s1, map<string,int> ma1,map<string,int> ma2)
{
int t=s1.length();
string s;
int a=0;
if(t>3)
{
s.insert(s.begin(),s1.begin(),s1.begin()+3);
a+=ma2[s]*13;
s.clear();
s1.erase(s1.begin(),s1.begin()+4);
}
s.insert(s.begin(),s1.begin(),s1.begin()+3);
a+=ma1[s];
if(ma1[s]==0&&s!="tret")
a+=ma2[s]*13;
printf("%d",a);
}