• HDU6010 DayLight Saving Light(模拟)


    传送门:DayLight Saving Light

    夏令时:

      夏时令(Daylight Saving Time:DST),又称“日光节约时制”和“夏令时间”,是一种为节约能源而人为规定地方时间的制度,在这一制度实行期间所采用的统一时间称为“夏令时间”。一般在天亮早的夏季人为将时间调快一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。

    摘自百度百科。

    题意:

      规定每到每年三月的第二个星期日的2:00就把时间调为3:00,再到该年的2:00的时候把时间再调为1:00。所以题目的意思为每年的1月1日0:00到三月第二个星期日的2:00为“PST”(不包括这个2:00时刻),这个2:00-3:00为“Neither”,3:00这个时刻到该年11月第一个星期日的1:00时刻(不包括1:00时刻)为“PDT”,1:00时刻到年终为“Both”。具体如下:

      另一个难点在于如何确定给出的日期是不是这两个日期中的一个。这个是队友按着日历数出来的,办法笨点能出题啊就行。

      

      所以规律就出来了,当该年是平年的时候日期是由上一个减一得出来的,如果是闰年就是由上一年减二得出来的。但十一月份最小是1再减就是从7开始往下减了。观察发现三月份和十一月份的日子是成对出现的,所以求出了十一月份的来三月份的就出来了。

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 1e5+10;
    typedef long long ll;
    struct Year
    {
        int ma;
        int no;
    } y[100];
    
    bool judge(int year)
    {
        if((year%4 == 0 && year%100 != 0) || year%400 == 0)
            return true;
        return false;
    }
    
    int fun(int x)
    {
        if(x == 4)
            return 11;
        else if(x == 2)
            return 9;
        else if(x == 1)
            return 8;
        else if(x == 7)
            return 14;
        else if(x == 6)
            return 13;
        else if(x == 3)
            return 10;
        else if(x == 5)
            return 12;
    }
    
    
    void init()
    {
        int n = 4;
        y[0].ma = 11,y[0].no = 4;
        for(int i = 2008; i<=2100; i++)
        {
            if(judge(i))
            {
                y[i-2007].no = (n - 2 + 7) % 7;
                n = y[i-2007].no;
            }
            else
            {
                y[i-2007].no = (n - 1 + 7) % 7;
                n = y[i-2007].no;
            }
            if(n == 0)
                y[i-2007].no = n = 7;
            y[i-2007].ma = fun(n);
        }
        return;
    }
    
    int main()
    {
        init();
        int T,cnt = 1;
        scanf("%d",&T);
        while(T--)
        {
            int yy,m,dd,hh,mm,ss;
            scanf("%d-%d-%d %d:%d:%d",&yy,&m,&dd,&hh,&mm,&ss);
            printf("Case #%d: ",cnt++);
            yy = yy-2007;
            if(m == 3)
            {
                if(dd == y[yy].ma)
                {
                    if(hh < 2)
                        printf("PST\n");
                    else if(hh == 2)
                        printf("Neither\n");
                    else
                        printf("PDT\n");
                }
                else if(dd>y[yy].ma)
                    printf("PDT\n");
                else if(dd<y[yy].ma)
                    printf("PST\n");
    
            }
            else if(m>=4 && m<=10)
                printf("PDT\n");
            else if(m==11)
            {
                if(dd == y[yy].no)
                {
                    if(hh<1)
                        printf("PDT\n");
                    else if(hh==1)
                        printf("Both\n");
                    else
                        printf("PST\n");
                }
                else if(dd>y[yy].no)
                    printf("PST\n");
                else if(dd<y[yy].no)
                    printf("PDT\n");
            }
            else
                printf("PST\n");
        }
        return 0;
    }
    /*
    样例输入:
    4
    2016-03-13 01:59:59
    2016-03-13 02:00:00
    2016-11-06 00:59:59
    2016-11-06 01:00:00
    样例输出:
    Case #1: PST
    Case #2: Neither
    Case #3: PDT
    Case #4: Both
    */
    View Code
  • 相关阅读:
    Lock
    线程结束的正确方式
    MySQL字段自增自减的SQL语句
    PIE使用阴影后的背景透明方法
    CSS中RGBA的兼容方法以及透明度计算方法
    纯 CSS 实现三角形尖角箭头的实例
    浏览器 CSS 兼容写法的测试总结
    使用PIE对IE进行CSS3兼容介绍和经验总结
    Linux下安装vnstat流量统计
    Linux下nginx生成日志自动切割
  • 原文地址:https://www.cnblogs.com/sykline/p/9735433.html
Copyright © 2020-2023  润新知