大致题意:

科普文一篇,文章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 ;
}

Lucky and Good Months by Gregorian Calendar(poj 3393)的更多相关文章

  1. POJ 3393:Lucky and Good Months by Gregorian Calendar 年+星期 模拟

    Lucky and Good Months by Gregorian Calendar Time Limit: 1000MS   Memory Limit: 65536K Total Submissi ...

  2. Lucky and Good Months by Gregorian Calendar - POJ3393模拟

    Lucky and Good Months by Gregorian Calendar Time Limit: 1000MS Memory Limit: 65536K Description Have ...

  3. Lucky and Good Months by Gregorian Calendar(模拟)

    http://poj.org/problem?id=3393 好大的一道模拟题,直接当阅读理解看了.下面是大神写的题意,解释的好详细. 定义: Goog month : 该月第一个工作日为星期一的月份 ...

  4. POJ 3393 Lucky and Good Months by Gregorian Calendar 模拟题

    题目:http://poj.org/problem?id=3393 不多说了,简单模拟题,因为粗心写错了两个字母,导致错了N遍,模拟还是一贯的恶心,代码实在不想优化了,写的难看了点.. #includ ...

  5. POJ 3393 Lucky and Good Months by Gregorian Calendar

    http://poj.org/problem?id=3393 题意 : 对于这篇长长的英语阅读,表示无语无语再无语,花了好长时间,终于读完了.题目中规定每周的周六日为假日,其他为工作日,若是一个月的第 ...

  6. poj 3393 Lucky and Good Months by Gregorian Calendar(模拟)

    题目:http://poj.org/problem?id=3393一道题目挺长的模拟题,参考了网上大神的题解. #include <iostream> #include <cstdi ...

  7. 三部曲二(基本算法、动态规划、搜索)-1003-Lucky and Good Months by Gregorian Calendar

    模拟加阅读题......虽然很多事常识性的知识,但也有许多不知道的知识,关键是不读不知道那些是已经知道的那些不是,许多重要的信息零散的分布在一大坨英文里,读起来很痛苦......自己读了一遍,读的晕晕 ...

  8. Maya Calendar POJ - 1008 (模拟)

    简述 注意260天的情况,这个地方还是0年 代码 #include <iostream> #include <map> #include <sstream> usi ...

  9. poj3393[模拟题]

    Lucky and Good Months by Gregorian Calendar Time Limit: 1000MS   Memory Limit: 65536K Total Submissi ...

随机推荐

  1. Java Web应用中获取用户请求相关信息,如:IP地址、操作系统、浏览器等信息

    引入jar包 <dependency> <groupId>eu.bitwalker</groupId> <artifactId>UserAgentUti ...

  2. 2006: C语言实验——拍皮球

    2006: C语言实验——拍皮球 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 231  Solved: 162[Submit][Status][Web ...

  3. 朴素贝叶斯分类<转载>

    转自http://www.cnblogs.com/leoo2sk/archive/2010/09/17/naive-bayesian-classifier.html 0.写在前面的话 我个人一直很喜欢 ...

  4. PAT 乙级 1027

    题目 题目地址:PAT 乙级 1027 思路 本题需要注意两点: 1. 对于每行输出字符的循环和判断没有完全搞清楚,导致在4 * 的条件下会输出7个字符,n的结果是-3. 2. 没有考虑到小于等于0的 ...

  5. [LUOGU] P1551 亲戚

    题目背景 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 题目描述 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚.如 ...

  6. 常用c++函数

    strrev(str)  (str为字符串)倒序输出字符串 floor(x),有时候也写做Floor(x),其功能是“向下取整”,或者说“向下舍入”,即取不大于x的最大整数(与“四舍五入”不同,下取整 ...

  7. python--网络通信协议

    一 . osi七层协议 互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层 二 . tcp三次握手和四次挥手 我们知道网络层,可以实现两个主机之间的通信.但是这并不具体,因为,真 ...

  8. python--内置函数, 匿名函数

    一 . 内置函数 什么是内置函数? 就是python给你提供的. 拿来直接⽤的函数, 比如print., input等等. 字符串类型代码的执⾏ eval() 执⾏字符串类型的代码. 并返回最终结果( ...

  9. 使用POI循环写入数据时发现只有最后一列有数据

    直接说重点: 一般出现在多重(一般是两重)循环,再多几重效率就很低了. 检查调用createRow() 是否在外层循环调用的,如果是在内层循环调用就会出现这个问题,因为程序会不停的重新创建行,直至最后 ...

  10. Python9-字典-day5

    数据类型划分:可变数据类型,不可变数据类型不可变数据类型:元祖 bool int str 可哈希可变数据类型:list,dic set 不可哈希dict key 必须是不可变数据类型,可哈希 valu ...