zoukankan      html  css  js  c++  java
  • hihocoder1477 闰秒

    地址:http://hihocoder.com/problemset/problem/1477

    题目:

    闰秒

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    计算机系统中使用的UTC时间基于原子钟,这种计时方式同“地球自转一周是24小时”的计时方式有微小的偏差。为了弥补这种偏差,我们偶尔需要增加一个“闰秒”。  

    最近的一次闰秒增加发生在UTC时间2016年的最后一天。我们在2016年12月31日23时59分59秒和2017年1月1日0时0分0秒之间增加了这样一秒:2016年12月31日23时59分60秒,记作2016-12-31 23:59:60。  

    目前一共增加了27次闰秒,具体添加的时间见下表:

    给出两个时间,请你判断在考虑闰秒的情况下,这两个时间间隔多少秒。  

    输入

    两个时间各占一行,格式是yyyy-MM-dd HH:mm:ss,范围在1970-01-01 00:00:00至2017-03-12 23:59:59之间。保证第一个时间不晚于第二个时间。

    输出

    两个时间间隔多少秒。

    样例输入
    2016-12-31 23:59:59 
    2017-01-01 00:00:00
    样例输出
    2
    思路:没啥好说的,大模拟!见代码吧!
     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 #define PB insert
     6 typedef long long LL;
     7 typedef pair<int,int> PII;
     8 const double eps=1e-8;
     9 const double pi=acos(-1.0);
    10 const int K=1e6+7;
    11 const int mod=1e9+7;
    12 
    13 struct Time
    14 {
    15     int y,m,d,h,mi,s;
    16     void read(void)
    17     {
    18         scanf("%d-%d-%d %d:%d:%d",&y,&m,&d,&h,&mi,&s);
    19     }
    20 }st,se;
    21 set<int>six,dece;
    22 int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    23 void init(void)
    24 {
    25     st.read(),se.read();
    26     six.PB(1972),six.PB(1981),six.PB(1982),six.PB(1983);
    27     six.PB(1985),six.PB(1992),six.PB(1993),six.PB(1994);
    28     six.PB(1997),six.PB(2012),six.PB(2015);
    29     dece.PB(1972),dece.PB(1973),dece.PB(1974),dece.PB(1975);
    30     dece.PB(1976),dece.PB(1977),dece.PB(1978),dece.PB(1979);
    31     dece.PB(1987),dece.PB(1989),dece.PB(1990),dece.PB(1995);
    32     dece.PB(1998),dece.PB(2005),dece.PB(2008),dece.PB(2016);
    33 }
    34 bool check(int x)
    35 {
    36     return (x%4==0&&x%100!=0)||x%400==0;
    37 }
    38 int cal(Time &x)
    39 {
    40     int ans=0;
    41     for(int i=1;i<x.m;i++)
    42         ans+=day[i]*24*60*60;
    43     if(check(x.y)&&2<x.m)   ans+=24*60*60;
    44     ans+=(x.d-1)*24*60*60;
    45     ans+=x.h*60*60;
    46     ans+=x.mi*60;
    47     ans+=x.s;
    48     if(six.find(x.y)!=six.end()&&6<x.m)ans++;
    49     return ans;
    50 }
    51 int main(void)
    52 {
    53     int ta,tb,ans=0;
    54     ta=365*24*60*60;
    55     tb=366*24*60*60;
    56     init();
    57     for(int i=st.y;i<se.y;i++)
    58     {
    59         if(check(i))    ans+=tb;
    60         else    ans+=ta;
    61         if(six.find(i)!=six.end()) ans++;
    62         if(dece.find(i)!=dece.end())    ans++;
    63     }
    64     ans-=cal(st);
    65     ans+=cal(se);
    66     cout<<ans<<endl;
    67     return 0;
    68 }
  • 相关阅读:
    react 把时间戳用new Date改为日期
    react-格式化日期
    react-2种方法写法
    React-router4简约教程
    react-addons-css-transition-group
    vue-一些易错点
    Js apply方法详解,及其apply()方法的妙用
    C++中的继承(3)作用域与重定义,赋值兼容规则
    C++中的继承(1) 继承方式
    vim中文帮助文档安装
  • 原文地址:https://www.cnblogs.com/weeping/p/6541405.html
Copyright © 2011-2022 走看看