Error message here!

Hide Error message here!

忘记密码?

Error message here!

请输入正确邮箱

Hide Error message here!

密码丢失?请输入您的电子邮件地址。您将收到一个重设密码链接。

Error message here!

返回登录

Close

HDU 6556 (2018CCPC吉林 B题)

大头冲锋车丶 2019-09-04 22:00:00 阅读数:11 评论数:0 点赞数:0 收藏数:0

### HDU 6556 题目链接 ###

题目大意:

给你四个国家的时区,告诉你 A 国家的时间,让你输出这时候在 B 国家的时间,还需要输出对于 A 国家来说这是 昨天、今天 还是 明天。

 


分析前提:

1、对于时区转换,通过样例我们可以了解到的是: B 国家的时间差减去 A 国家的时间差 (这个时间差是对于标准时间而言,即题面中的 英国 。这个时间差在题面上每个国家末尾,带正负。)这样就可以根据正负与值来判断 A 与 B 的时间差值了。

2、我们还需要知道的是,对于凌晨0 :00,应该为 12 :00 AM ,而对于中午,应该为 12 :00 PM 。

 

之后我们需要来看看这道题怎么做了,很显然是模拟题,需要分类讨论。

 B 国家先于 A 国家 (即 B 时间差减 A 时间差为负,记为 t ),那么说明我们需要将 A 国家的时间,往前挪 t 个时间长度。

  • 若当前时间往前减去 t 个长度时,不超过当前的时间段的 12 点(即 0 点)。 

  比如现在是 3:00 AM ,往前挪 2 小时, 则不会超过 12:00 AM ,那么直接用 3 减去 2 ,分钟、AM 都不变,即为答案, PM 同理。

  • 若当前时间往前减去 t 个长度时,超过当前的时间段的 12 点(即 0 点)。这里有两种可能。 

  假设当前为 12 :00 AM,要往前挪 13 小时 (我们要知道,这道题最大的时间差就是 8 + 3 = 13 小时),那么就变成了昨天的 11 : 00 AM。同理我们         可知,如果当前为 12:00 PM,最大往前只会挪 13 小时,到昨天的 11 : PM 。所以如果 0 - t + 12 (12点看成 0 )小于 0 了,那么首先无论现在是              AM 还是 PM ,都一定会到昨天,且 AM 与 PM 不会改变。

       如果 0 - t + 12 大于等于 0 ,那么说明不一定会到昨天,且与 当前是 AM 还是 PM 有关。笔画一下就知道,AM 往前如果超过了 12 : 00 AM ,那么必           定到昨天。PM 则还是在今天,分类讨论即可。

那么对于 A 先于 B 国家的情况,大家自己去试试啦~

 

代码如下:

 

#include<iostream>
#include<algorithm>
#include<string.h>
#include<string>
#include<map>
using namespace std;
map<string,int> m;
int t;
int A;
char B[],C[];
string a,b;
int main()
{
    //freopen("test.in","r",stdin);
    //freopen("test.out","w",stdout);
    m.clear();
    m.insert(make_pair("Beijing",));
    m.insert(make_pair("Washington",-));
    m.insert(make_pair("London",));
    m.insert(make_pair("Moscow",));
    scanf("%d",&t);
    int T=;
    while(t--)
    {
        scanf("%d:%s %s",&A,&B,&C);
        cin>>a>>b;
        int temp=m[b]-m[a];
        if(temp==){
            printf("Case %d: Today %d:%s %s\n",++T,A,B,C );
        }
        else if(temp<){
            temp=-temp;
            if(A==) A=;
            if(A>=temp){
                A-=temp;
                if(A==) A=;
                printf("Case %d: Today %d:%s %s\n",++T,A,B,C );
            }
            else{
                A=A-temp+;
                if(A<){
                    A+=;
                    printf("Case %d: Yesterday %d:%s %s\n",++T,A,B,C );
                }
                else{
                    if(A==) A=;
                    if(C[]=='A') printf("Case %d: Yesterday %d:%s PM\n",++T,A,B );
                    else printf("Case %d: Today %d:%s AM\n",++T,A,B );
                }
            }
        }
        else{
            if(A==) A=;
            if(-A>=temp){
                A+=temp;
                if(A==&&C[]=='P') printf("Case %d: Tomorrow %d:%s AM\n",++T,A,B );
                else if(A==&&C[]=='A') printf("Case %d: Today %d:%s PM\n",++T,A,B );
                else{
                    printf("Case %d: Today %d:%s %s\n",++T,A,B,C );
                }
            }
            else{
                A+=temp-;
                if(A>=){
                    A-=;
                    if(A==) A=;
                    printf("Case %d: Tomorrow %d:%s %s\n",++T,A,B,C );
                }
                else{
                    if(C[]=='A') printf("Case %d: Today %d:%s PM\n",++T,A,B );
                    else printf("Case %d: Tomorrow %d:%s AM\n",++T,A,B );
                }
            }
        }
    }
}

 

版权声明
本文为[大头冲锋车丶]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/Absofuckinglutely/p/11461711.html