- 注意这里的时间是double类型
- 强制类型转换最好加上括号
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<algorithm>
using namespace std;
map<string,double> TIME={
{"UTC",0},
{"GMT",0}, {"BST",1},{"IST",1},{"WET",0} , {"WEST",1}, {"CET",1},
{"CEST",2} ,{"EET",2} , {"EEST",3},{"MSK",3} ,{"MSD",4} ,{"AST",-4} ,
{"ADT",-3},{"NST",-3.5} ,{"NDT",-2.5} ,{"EST",-5} ,{"EDT",-4} ,{"CST",-6},
{"CDT",-5},{"MST",-7},{"MDT",-6},{"PST",-8},{"PDT",-7} ,{"HST",-10},
{"AKST",-9},{"AKDT",-8},{"AEST",10},{"AEDT",11},{"ACST",9.5},{"ACDT",10.5},
{"AWST",8 }
};
int main() {
int n;
scanf("%d",&n);
getchar();
while(n--){
int minute,h,m;
char time[10],ap[10],z1[10],z2[10],input[100];
string Z1,Z2;
gets(input);
if(input[0]=='n'||input[0]=='m'){
sscanf(input,"%s%s%s",time,z1,z2);
Z1=z1;Z2=z2;
if(time[0]=='n') minute=(720+1440+(int)((TIME[Z2]-TIME[Z1])*60))%1440;
else minute=(1440+(int)((TIME[Z2]-TIME[Z1])*60))%1440;
}
else{
sscanf(input,"%d:%d%s%s%s",&h,&m,ap,z1,z2);
Z1=z1;Z2=z2;
if(h==12) h=0;
if(ap[0]=='a') minute=(h*60+m+1440+(int)((TIME[Z2]-TIME[Z1])*60))%1440;
else minute=((h+12)*60+m+1440+(int)((TIME[Z2]-TIME[Z1])*60))%1440;
}
if(minute==0) printf("midnight\n");
else if(minute<60) printf("12:%02d a.m.\n",minute);
else if(minute<720) printf("%d:%02d a.m.\n",minute/60,minute%60);
else if(minute==720) printf("noon\n");
else if(minute<780) printf("12:%02d p.m.\n",minute%60);
else printf("%d:%02d p.m.\n",minute/60-12,minute%60);
}
return 0;
}