题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6556
题意:就是一个时区转换和上下午判别。
解题心得:就是一个常规题,时间转换之后时钟大于等于24代表是在Tomorrow,如果小于0代表在Yesterday。只不过有一点就是半夜0点写成12点AM,这里要注意输入和输出,还有就是输出小时是%d,分钟是%02d。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
map <string, int> maps;
void init() {
string st;
st = "Beijing";
maps[st] = 8;
st = "Washington";
maps[st] = -5;
st = "London";
maps[st] = 0;
st = "Moscow";
maps[st] = 3;
}
int main() {
// freopen("1.in.txt", "r", stdin);
init();
int t; scanf("%d", &t);
int T = t;
while(t--) {
int h, m;
string now, Next, w;
scanf("%d:%d", &h, &m);
cin>>w>>now>>Next;
if(w == "PM") {
if(h != 12)
h += 12;
} else {
if(h == 12)
h -= 12;
}
int pos1, pos2;
pos1 = maps[now];
pos2 = maps[Next];
if(pos2 <= pos1) {
h -= (pos1 - pos2);
} else {
h += (pos2 - pos1);
}
printf("Case %d: ", T-t);
if(h < 0) {
printf("Yesterday ");
h += 24;
} else if(h >= 24) {
printf("Tomorrow ");
h -= 24;
} else {
printf("Today ");
}
string st;
if(h < 12) {
st = "AM";
if(h == 0) h += 12;
}
else {
st = "PM";
if(h > 12)
h -= 12;
}
printf("%d:%02d %s\n", h, m, st.c_str());
}
return 0;
}