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

HDU 6556 (2018CCPC吉林 B题)的更多相关文章

  1. 2018CCPC吉林赛区 hdu6555~hdu6566

    2018CCPC吉林赛区(重现赛)- 感谢北华大学 A 基础数论. #include<bits/stdc++.h> using namespace std; typedef long lo ...

  2. [2018CCPC吉林赛区(重现赛)- 感谢北华大学] 补题记录 躁起来

    1007 High Priestess 埃及分数 1008 Lovers 线段树维护取膜意义下的区间s和. 每个区间保存前缀lazy和后缀lazy. #include <iostream> ...

  3. HDU 6562 lovers 2018CCPC吉林H(线段树)

    题意: 初始n个空串,m个操作: 1.给[l,r]的所有字符串头尾加一个‘d’,将原字符串x变为dxd 2.求[l,r]所有字符串代表的数字之和mod 1e9+7 思路: 据说是硬核线段树.. 对于线 ...

  4. HDU 2222 AC自动机模板题

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=2222 AC自动机模板题 我现在对AC自动机的理解还一般,就贴一下我参考学习的两篇博客的链接: http: ...

  5. HDU 1251 Trie树模板题

    1.HDU 1251 统计难题  Trie树模板题,或者map 2.总结:用C++过了,G++就爆内存.. 题意:查找给定前缀的单词数量. #include<iostream> #incl ...

  6. HDU 3065 (AC自动机模板题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3065 题目大意:多个模式串,范围是大写字母.匹配串的字符范围是(0~127).问匹配串中含有哪几种模 ...

  7. HDU 2896 (AC自动机模板题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2896 题目大意:多个模式串.多个匹配串.其中串的字符范围是(0~127).问匹配串中含有哪几个模式串 ...

  8. hdu 5455 Fang Fang 坑题

    Fang Fang Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5455 ...

  9. [HDU 2102] A计划(搜索题,典型dfs or bfs)

    A计划 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

随机推荐

  1. KubeSphere and Friends|12 月 14 日相约北京,不见不散

    如今在容器圈提到 Kubernetes,可谓是无人不知无人不晓.KubeSphere 作为一款面向云原生设计的开源项目,目的是在 Kubernetes 之上构建分布式多租户容器管理平台,提供简单易用的 ...

  2. 给定数轴上的n个点,求距离最近的两个点的距离

    public class MinimumSpacing { //给定平面上的n个点,求距离最近的两个点的距离. //无从下手的话,先分解问题,分解成简单的,逐个分析,然后再合在一起考虑 //这是个2维 ...

  3. C++ std::list 基本用法

    #include <iostream> #include <string> #include <list> using namespace std; // http ...

  4. Vue父子组件数据双向绑定,子组件可修改props

    第一种,子组件通过监听父组件数据,子组件改变数据之后通知给父组件 原文链接:https://blog.csdn.net/m0_37728716/article/details/81776929 父组件 ...

  5. 【Linux命令】setfacl、getfacl命令基本用法(文件权限全文控制列表acl)

    一.setfacl命令setfacl用来细分linux下的文件权限. chmod命令可以把文件权限分为u,g,o三个组,而setfacl可以对每一个文件或目录设置更精确的文件权限. 换句话说,setf ...

  6. go语言之用户输入&类型别名&类型转换

    1.用户输入 package main import "fmt" func main() { //用户输入,程序接受并输出 var v1 int //fmt.Println(&qu ...

  7. wx-show与!show

    切换的表示 <!--index.wxml--> <view class="container"> <view class="item&quo ...

  8. 持续集成与Devops关系

    什么是持续集成 持续集成(Continuous Integration,简称CI),是一种软件开发实践,在实践中指只要代码有变更,就自动运行构建和测试,反馈运行结果.通俗一点来讲,就是绑定项目的代码仓 ...

  9. Tensorflow创建会话,启动会话

    import tensorflow as tf #定义一个常量 m1=tf.constant([[,]])#这是一个一行两列的数据 print(m1) m2=tf.constant([[],[]]) ...

  10. 对Android 8.0以上版本通知点击无效的一次分析

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/178 对Android 8.0以上版本通知点击无效的一次分 ...