The World
前段时间,tyd和zx环游了世界,他们玩的非常开心,并且发现了很多好玩的事情。
世界各地都有不同的时区,导致时差。 在这里,你可以了解几个著名的首都及其相应的时区。
北京Beijing - 中国 - UTC + 8(中国标准时间)
华盛顿Washington - 美国 - UTC - 5(东部标准时间)
伦敦London - 英国 - UTC(格林威治标准时间)
莫斯科Moscow - 俄罗斯 - UTC + 3(莫斯科时间)
根据城市的当地时间,您需要计算上述首都中另一个特定城市的日期和当地时间。
Input
第一行输入包含一个整数 T,T ≤ 1000 表示测试用例的数量.
每个测试用例包含三行. 第一行的形式为 “hour:minute AM/PM” (1 ≤ hour ≤ 12, 00 ≤ minute ≤ 59) 表示当地时间. 接下来的两行包含两个字符串 s1,s2. s1 是与给定时间对应的城市名称, 而s2表示希望你计算当地时间的城市。.
Output
对于每个测试用例, 以 “Case i:”开头, 其中i表示样例编号, 然后按照以下格式输出单行“Yesterday/Today/Tomorrow hour:minute AM/PM”, 用空格分隔. 第一个单词描述了相应的日期.
Sample Input
2
12:00 AM
London
Moscow
4:00 PM
London
Beijing
Sample Output
Case 1: Today 3:00 AM
Case 2: Tomorrow 12:00 AM
传送门
思路,将读入时间转换成[0,24)的整数
(注意题目中12:00 AM是今天0:00,12:00 PM是中午12:00,见样例二,只有0-23是属于今天的,24属于明天)
特判一下这两个时间就可以了
#include<iostream>
#include<string>
#include<stdio.h>
#include<map>
using namespace std;
int main()
{
int T;
map<string,int>mp;
mp["Beijing"]=8,mp["Washington"]=-5,mp["London"]=0,mp["Moscow"]=3;
cin>>T;
for(int tt=1;tt<=T;tt++)
{
string time,st,s1,s2;
cin>>time>>st>>s1>>s2;
printf("Case %d: ",tt);
int hour,minnue;
if(time.size()==5) {
hour=(time[0]-'0')*10+time[1]-'0';minnue=(time[3]-'0')*10+time[4]-'0';
}
else hour=time[0]-'0',minnue=(time[2]-'0')*10+time[3]-'0';
if(hour==12&&st=="AM") hour=0;
else if(st=="PM"&&hour!=12) hour+=12;
hour-=mp[s1];
hour+=mp[s2];
string day;
if(hour>=0&&hour<24){
day="Today ";
if(hour<12) {
st="AM";
if(hour==0) hour=12;
}
else {
st="PM";
if(hour!=12) hour-=12;
}
}
else if(hour<0) {
day="Yesterday ";
hour+=24;
if(hour<12) {
st="AM";
if(hour==0) hour=12;
}
else {
st="PM";
if(hour!=12) hour-=12;
}
}
else {
hour-=24;
day="Tomorrow ";
if(hour<12) {
st="AM";
if(hour==0) hour=12;
}
else {
st="PM";
if(hour!=12) hour-=12;
}
}
string time1;
time1+=minnue/10+'0';
time1+=minnue%10+'0';
cout<<day<<hour<<':'<<time1<<" "<<st<<endl;
}
return 0;
}