题意:

[3月的第二个周日02:00:00 , 3月的第二个周日03:00:00) 这个区间都不是PST或PDT,[11月的第一个周日01:00:00 , 11月的第一个周日02:00:00) 这个区间既是PST又是PDT,中间的是PDT,两边的是PST。

分析:

计算星期几可以直接用公式进行计算

C/C++ 根据年月日计算星期几——蔡勒公式篇

计算3月的第二个周日为哪一天:day=15-ReturnWeekDay(year,3,1)

计算11月的第一个周日为哪一天:day=8-ReturnWeekDay(year,11,1)

这个公式可以自行推导

#include <bits/stdc++.h>
using namespace std; char s[50]; struct Time
{
int mth,day;
int hor,mnt,scd;
Time() {};
Time(int m,int d,int h,int mi,int s)
{
mth=m,day=d;
hor=h,mnt=mi,scd=s;
}
} ti; int ReturnWeekDay( unsigned int iYear, unsigned int iMonth, unsigned int iDay )
{ //http://blog.csdn.net/areskris/article/details/8661983
int iWeek=0;
unsigned int y=0, c=0, m=0, d=0;
if(iMonth==1 || iMonth==2 )
{
c=( iYear-1)/ 100;
y=( iYear-1)% 100;
m=iMonth+12;
d=iDay;
}
else
{
c=iYear/100;
y=iYear%100;
m=iMonth;
d=iDay;
}
iWeek=y+y/4+c/4-2*c+26*(m+1)/10+d-1; //蔡勒公式
iWeek=iWeek >= 0 ?(iWeek % 7):(iWeek%7+7); //iWeek为负时取模
if(iWeek==0) iWeek=7; //星期日不作为一周的第一天
return iWeek;
} int circle(int k)
{
int res=0;
for(int i=k; i<k+2; i++)
{
res*=10;
res+=s[i]-'0';
}
return res;
} void transf()
{
ti.mth=circle(5);
ti.day=circle(8);
ti.hor=circle(11);
ti.mnt=circle(14);
ti.scd=circle(17);
} bool cmp(Time a,Time b)
{
if(a.mth==b.mth)
{
if(a.day==b.day)
{
if(a.hor==b.hor)
{
if(a.mnt==b.mnt)
{
return a.scd<b.scd? false:true;
}
return a.mnt<b.mnt? false:true;
}
return a.hor<b.hor? false:true;
}
return a.day<b.day? false:true;
}
return a.mth<b.mth? false:true;
} int main()
{
// freopen("in.txt","r",stdin);
int t,kase=0;
scanf("%d",&t);
getchar();
while(t--)
{
gets(s);
transf();
int year=0;
for(int i=0; i<4; i++)
{
year*=10;
year+=s[i]-'0';
}
int day=15-ReturnWeekDay(year,3,1);
Time pst1=Time(3,day,2,0,0);
Time pdt1=Time(3,day,3,0,0);
day=8-ReturnWeekDay(year,11,1);
Time pdt2=Time(11,day,1,0,0);
Time pst2=Time(11,day,2,0,0);
printf("Case #%d: ",++kase);
if(!cmp(ti,pst1) || cmp(ti,pst2))
puts("PST");
else if(cmp(ti,pst1) && !cmp(ti,pdt1))
puts("Neither");
else if(cmp(ti,pdt1) && !cmp(ti,pdt2))
puts("PDT");
else puts("Both");
}
return 0;
}

Gym 101206L Daylight Saving Time 根据年月日计算星期的更多相关文章

  1. 08--MOOC--C/C++ 根据年月日计算星期几

    计算任何一天是星期几的几种算法 一:常用公式 W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D Y是年份数,D是这一天在这一年中的累积天数,也 ...

  2. An problem about date 根据年月日计算 星期几

    /W = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7(1.2月需要看作上一年的13.14月) #include<stdio.h> #include& ...

  3. C# 根据日期计算星期几

    region 根据年月日计算星期几(Label2.Text=CaculateWeekDay(,,);) /// <summary> /// 根据年月日计算星期几(Label2.Text=C ...

  4. hdu 6010 Daylight Saving Time 泰勒公式

    Daylight Saving Time Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  5. Daylight Saving Time

    [Daylight Saving Time] 夏时制,又称日光节约时制.日光節約時間(英语:Daylight saving time)或夏令时间(英语:Summer time),是一种为节约能源而人为 ...

  6. DayLight Saving Light(HDU6010)

    传送门:DayLight Saving Light 夏令时: 夏时令(Daylight Saving Time:DST),又称“日光节约时制”和“夏令时间”,是一种为节约能源而人为规定地方时间的制度, ...

  7. HDU6010 Daylight Saving Time

    /* HDU6010 Daylight Saving Time http://acm.hdu.edu.cn/showproblem.php?pid=6010 模拟 题意:算当前时间是否是夏令时 */ ...

  8. 编写Java程序随机输入日期计算星期几,打印任意一年的日历

    需求说明: 随机输入日期计算星期几,打印任意一年的日历 已知,1900年1月1日是星期1,用户随机输入年月日,计算星期几 实现思路: 一.知道1900年1月1日为星期一,求输入的年份月份与1900年1 ...

  9. 根据日期计算星期几----蔡勒(Zeller)公式推导

    计算给定日期是星期几,好象是编程都会遇到的问题,最近论坛里也有人提到这个问题,并给出了一个公式:             W=   (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400 ...

随机推荐

  1. 【转载】spice 有截图

    https://segmentfault.com/a/1190000011991047

  2. Linux压力测试软件Stress安装及使用指南2

    stress工具使用指南和结果分析 Linux压力测试软件Stress安装及使用指南     一.Stress是什么 stress是一个linux下的压力测试工具,专门为那些想要测试自己的系统,完全高 ...

  3. 实战-加密grub防止黑客通过单用户系统破解root密码

    基于Centos8进行grub加密 加密grub 实战场景:给grub加密,不让别人通过grub进入单用户. 使用grub2-mkpasswd-pbkdf2创建密文 [root@localhost ~ ...

  4. Java和JDK版本的关系-(转载)

    JAVA的版本最开始是1995年的JDK Alpha and Beta版本,第二年发布JDK1.0版本之后就是JDK1.1,JDK1.2.到1998年,不再叫JDK了,而是叫J2SE,但是版本号还是继 ...

  5. 6.2 gzip:压缩或解压文件

    gzip命令 用于将一个大的文件通过压缩算法(Lempel-Ziv coding(LZ77))变成一个小的文件.gzip命令不能直接压缩目录,因此目录需要先用tar打包成一个文件,然后tar再调用gz ...

  6. uni-app 富文本解析-小程序

    原文:http://www.upwqy.com/manual/info/105.html 1 引入插件 gaoyia-parse 链接:https://pan.baidu.com/s/1UusfXxH ...

  7. JavaSE-QuickStart

    老话常说:基础不牢地动山摇,于是我在b站上看杨中科老师的课程脑补一下,便记录这岁月的点滴 1.什么是编程 ? 编程:编写能够控制计算机来执行特定任务的代码. 2.什么是编程语言 ? 编程语言:是指程序 ...

  8. MongoDB学习笔记:Python 操作MongoDB

    MongoDB学习笔记:Python 操作MongoDB   Pymongo 安装 安装pymongopip install pymongoPyMongo是驱动程序,使python程序能够使用Mong ...

  9. 在windows上 使用celery 报错

    在windows上 使用celery 报错       在windows上 使用celery 报错 ValueError: not enough values to unpack (expected ...

  10. TensorFlow+TVM优化NMT神经机器翻译

    TensorFlow+TVM优化NMT神经机器翻译 背景 神经机器翻译(NMT)是一种自动化的端到端方法,具有克服传统基于短语的翻译系统中的弱点的潜力.本文为全球电子商务部署NMT服务. 目前,将Tr ...