夏令时:
夏时令(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开始往下减了。观察发现三月份和十一月份的日子是成对出现的,所以求出了十一月份的来三月份的就出来了。
代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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 */