大致题意:

科普文一篇,文章80%都是无用信息,因为都是常识,但是又不得不看,因为有20%是常人不知道的历史常识。

定义:

Goog month : 该月第一个工作日为星期一的月份

Luckly month: 该月最后一个工作日为星期五的月份

问: 给定一个Gregorian Calendar格里高公历的 时间闭区间(就是包括端点的年月了)

【开始年、月】~【结束年、月】

在这个时间区间内,有多少个Goog month,有多少个Luckly month

文章要点:

Gregorian Calendar格里高公历 就是现在广泛使用公历(西历),下面简称GC

GC的起始日期为 1年1月1号,该日为星期六

GC平年有365天,闰年366天(2月多1天)

GC有12个月,各月的天数和现在的使用的西历一致

GC在1582年之前(不包括1582),若该年份能被4整除,则为闰年

GC在1582年之后(包括1582),判断闰年的标准(满足下面随便一个):

(1) 能被4整除,但不能被100整除;

(2) 能被400整除。

由于历史原因,GC规定1700年无条件为闰年

由于历史原因,GC规定1752年9月3日~13日共11天不存在,即1752年9月只有19天

GC一星期有7天,排序为Sun,Mon,Tue,Wed,Thu,Fri,Sat,和现在的星期一致,其中Mon到Fri为工作日,Sun和Sat为休息日

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int mnum[]={,,,,,,,,,,,,};
int rnum[]={,,,,,,,,,,,,};
int nu52[]={,,,,,,,,,,,,};
int rr[],rr_b[],good[][],lucky[][];
int run(int x)
{
if(rr_b[x])return rr[x];
rr_b[x]=;
if(x<&&x%==)rr[x]=;
else if(x==)rr[x]=;
else if(x%==)rr[x]=;
else if(x%==&&x%!=)rr[x]=;
return rr[x];
}
void work()
{
int day=;
for(int i=;i<=;i++)//循环年份
{
for(int j=;j<=;j++)//循环月份
{
if(j==)//一月和普通月的差别
{
good[i][j]=good[i-][];
lucky[i][j]=lucky[i-][];
}
else
{
lucky[i][j]=lucky[i][j-];
good[i][j]=good[i][j-];
}
if(i==)//1752年
{
int gd=(day+)%,ld=(day+nu52[j])%;
if(gd==||gd==||gd==)good[i][j]+=;
if(ld==||ld==||ld==)lucky[i][j]+=;
day=(day+nu52[j])%;
}
else if(run(i))//普通闰年
{
int gd=(day+)%,ld=(day+rnum[j])%;
if(gd==||gd==||gd==)good[i][j]+=;
if(ld==||ld==||ld==)lucky[i][j]+=;
day=(day+rnum[j])%;
}
else//普通年
{
int gd=(day+)%,ld=(day+mnum[j])%;
if(gd==||gd==||gd==)good[i][j]+=;
if(ld==||ld==||ld==)lucky[i][j]+=;
day=(day+mnum[j])%;
}
}
}
}
int main()
{
int x,xm,y,ym,T;
work();
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d%d",&x,&xm,&y,&ym);
if(xm==)printf("%d %d\n",lucky[y][ym]-lucky[x-][],good[y][ym]-good[x-][]);
else printf("%d %d\n",lucky[y][ym]-lucky[x][xm-],good[y][ym]-good[x][xm-]);
}//注意xm是一月份的时候
return ;
}

最新文章

  1. twitter.common.concurrent deadline and defer
  2. 【opencv学习笔记】SetImageROI函数设置ROI区域的作用及用法
  3. Showing progress bar in a status bar pane
  4. 花生壳+Tomcat
  5. ubuntu cron.hourly不运行
  6. eclipse 下找不到或无法加载主类的解决办法[转]
  7. SQL with as 替代临时表的用法
  8. (三)微信小程序首页的分类功能和搜索功能的实现笔记
  9. P3953 逛公园
  10. spring cloud 微服务日志跟踪 sleuth logback elk 整合
  11. JDK版本更换,Eclipse中所有的项目报错
  12. 【BZOJ2242】计算器(BSGS,快速幂)
  13. php 压缩文件 zip
  14. Linux使用命令 笔记
  15. bzoj5011: [Jx2017]颜色
  16. idea不识别yml配置文件,怎么办?
  17. linux命令学习之:passwd
  18. 洛谷 3706 [SDOI2017]硬币游戏——思路
  19. SpringCloud配置
  20. MySQL提权之user.MYD中hash破解方法

热门文章

  1. Python实现1-9数组形成的结果为100的所有运算式
  2. (转)SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合
  3. 在Solr中配置中文分词IKAnalyzer
  4. linux yum 安装mysql
  5. 在Terminal中,如何打开Finder,并显示当前的目录
  6. IjkPlayer播放器秒开优化以及常用Option设置
  7. PAT (Basic Level) Practise (中文)-1029. 旧键盘(20)
  8. HTML5拖放(drag和drog)
  9. egg.js 学习之 中间件使用
  10. 初涉trie