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

题目链接: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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值