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

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

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

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



#include 
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;
}

你可能感兴趣的:(水题-模拟)