L Daylight Saving Time(模拟)

来源:互联网 发布:环绕音乐制作软件 编辑:程序博客网 时间:2024/05/26 12:07


不难的模拟 却被题意卡死了

changes back from PDT to PST at 02:00 to 01:00

这句话是指从2点变成1点 我tm以为是这个时间段。。。一开始就觉得奇怪 时间段怎么会从2->1 就没管他了 结果是翻译错了。。。


#include <iostream>#include <stdio.h>#include <string.h>#include <stack>#include <queue>#include <map>#include <set>#include <vector>#include <math.h>#include <bitset>#include <algorithm>#include <climits>#include <bits/stdc++.h>using namespace std;const int N = 30;typedef long long LL;set<int>q;int judge(int x){    if((x%400)==0||(x%100!=0 && x%4==0)) return 1;    return 0;}int mx[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};struct node{    int year, mon, day;    int h,m,s;    bool operator <(const node &A)const    {        if(year!=A.year) return year<A.year;        if(mon!=A.mon) return mon<A.mon;        if(day!=A.day) return day<A.day;        if(h!=A.h) return h<A.h;        if(m!=A.m) return m<A.m;        if(s!=A.s) return s<A.s;        return 0;    }    bool operator <=(const node &A)const    {        if(year!=A.year) return year<A.year;        if(mon!=A.mon) return mon<A.mon;        if(day!=A.day) return day<A.day;        if(h!=A.h) return h<A.h;        if(m!=A.m) return m<A.m;        if(s!=A.s) return s<A.s;        return 1;    }    bool operator >(const node &A)const    {        if(year!=A.year) return year>A.year;        if(mon!=A.mon) return mon>A.mon;        if(day!=A.day) return day>A.day;        if(h!=A.h) return h>A.h;        if(m!=A.m) return m>A.m;        if(s!=A.s) return s>A.s;        return 0;    }    bool operator >=(const node &A)const    {        if(year!=A.year) return year>A.year;        if(mon!=A.mon) return mon>A.mon;        if(day!=A.day) return day>A.day;        if(h!=A.h) return h>A.h;        if(m!=A.m) return m>A.m;        if(s!=A.s) return s>A.s;        return 1;    }    bool operator ==(const node &A)const    {        if(year!=A.year) return 0;        if(mon!=A.mon) return 0;        if(day!=A.day) return 0;        if(h!=A.h) return 0;        if(m!=A.m) return 0;        if(s!=A.s) return 0;        return 1;    }}p[10];int main(){    int t, ncase=1;    scanf("%d", &t);    while(t--)    {        scanf("%d-%d-%d %d:%d:%d", &p[0].year,&p[0].mon,&p[0].day,&p[0].h,&p[0].m,&p[0].s);        int x=2007, y=0;        while(x<p[0].year)        {            if(judge(x)) y+=366;            else y+=365;            x++;        }        int hx=y;        hx+=31;        if(judge(x)) hx+=29;        else hx+=28;        int cnt=0;        for(int i=1;i<=31;i++)        {            hx+=1;            hx%=7;            if(hx==0) cnt++;            if(cnt==2)            {                p[1].day=i;                break;            }        }        p[1].year=x,p[1].mon=3,p[1].h=2,p[1].m=0,p[1].s=0;        p[2]=p[1];        p[2].h=3;        hx=y;        for(int i=1;i<=10;i++)        {            if(i!=2)  hx+=mx[i];            else            {                if(judge(x)) hx+=29;                else hx+=28;            }        }        cnt=0;        for(int i=1;i<=30;i++)        {            hx+=1;            hx%=7;            if(hx==0) cnt++;            if(cnt==1)            {                p[3].day=i;                break;            }        }        p[3].year=x,p[3].mon=11,p[3].h=1,p[3].m=0,p[3].s=0;        p[4]=p[3];        p[4].h=2;        if(p[0]<p[1]) printf("Case #%d: PST\n",ncase++);        else if(p[0]<p[2]) printf("Case #%d: Neither\n",ncase++);        else if(p[0]<p[3]) printf("Case #%d: PDT\n",ncase++);        else if(p[0]<p[4]) printf("Case #%d: Both\n",ncase++);        else printf("Case #%d: PST\n",ncase++);    }    return 0;}