2018CCPC吉林赛区(重现赛)B. The World (模拟时区转换)

it2022-05-05  118

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6556

题意:就是一个时区转换和上下午判别。

解题心得:就是一个常规题,时间转换之后时钟大于等于24代表是在Tomorrow,如果小于0代表在Yesterday。只不过有一点就是半夜0点写成12点AM,这里要注意输入和输出,还有就是输出小时是%d,分钟是d。


#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:d %s\n", h, m, st.c_str()); } return 0; }

最新回复(0)