三部曲二(基本算法、动态规划、搜索)-1003-Lucky and Good Months by Gregorian Calendar
模拟加阅读题。。。。。。虽然很多事常识性的知识,但也有许多不知道的知识,关键是不读不知道那些是已经知道的那些不是,许多重要的信息零散的分布在一大坨英文里,读起来很痛苦。。。。。。自己读了一遍,读的晕晕乎乎的,还是看了别人的题解。
别人博客给的题意要点:
文章要点:
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为休息日
我自己的解题思路:
这道题是一道模拟题,不难想,不过需要细心,一点不对就会WA。
先算每年第一天是从1年1月1日后的第几天,再算具体到某年某月的第一天是从1年1月1日后的第几天,若是第n天,如果n%7<=2的话,就说明是Good Month,如果这一月是Good Month,上一月一定是 Lucky Month。
#include <iostream>
#include <cstring>
#include <stdio.h>
#define maxn 10001 using namespace std; int ys,ms,ye,me,days[maxn],bgday[maxn];
int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool IsLeapYear(int year)
{
if(year==1700)
return true;
else if(year<1582)
{
if(year%4==0)
return true;
else
return false;
}
else if(year>=1582)
{
if((year%100!=0&&year%4==0)||year%400==0)
{
return true;
}
else
return false;
}
} void CountDays()
{
int i;
for(i=1;i<10001;i++)
{
if(IsLeapYear(i))
{
days[i]=366;
}
else
days[i]=365;
if(i==1752)
days[i]-=11;
bgday[i+1]=bgday[i]+days[i];
}
}
int main()
{
//// freopen("in.txt","r",stdin);
bgday[1]=0;
CountDays();
int i,j;
//// for(i=1;i<100;i++)
//// {
//// cout<<days[i]<<'\t'<<bgday[i]<<'\t';
//// if(i%5==0)
//// cout<<endl;
//// }
int T;
scanf("%d",&T);
while(T--)
{
int lm=0,gm=0;
scanf("%d%d%d%d",&ys,&ms,&ye,&me); int td=bgday[ys];
for(i=1;i<ms;i++)
{
td+=months[i];
if(i==2&&IsLeapYear(ys))
td++;
if(i==9&&ys==1752)
td-=11;
}
i=ys;
j=ms;
me++;
if(me>12)
{
ye++;
me=1;
}
while(!(i==ye&&j==me))
{
// cout<<td<<' '<<td%7<<endl;
// cout<<td<<endl;
if(td%7<=2)
{
gm++;
if(!(i==ys&&j==ms))
lm++;
}
td+=months[j];
if(j==2&&IsLeapYear(i))
td++;
if(i==1752&&j==9)
td-=11;
j++;
if(j>12)
{
i++;
j=1;
}
}
if(j==2&&IsLeapYear(i))
td++;
if(i==1752&&j==9)
td-=11;
// cout<<td<<endl;
if(td%7<=2)
lm++;
printf("%d %d\n",lm,gm);
}
return 0;
}
三部曲二(基本算法、动态规划、搜索)-1003-Lucky and Good Months by Gregorian Calendar的更多相关文章
- Lucky and Good Months by Gregorian Calendar - POJ3393模拟
Lucky and Good Months by Gregorian Calendar Time Limit: 1000MS Memory Limit: 65536K Description Have ...
- POJ 3393:Lucky and Good Months by Gregorian Calendar 年+星期 模拟
Lucky and Good Months by Gregorian Calendar Time Limit: 1000MS Memory Limit: 65536K Total Submissi ...
- Lucky and Good Months by Gregorian Calendar(poj 3393)
大致题意: 科普文一篇,文章80%都是无用信息,因为都是常识,但是又不得不看,因为有20%是常人不知道的历史常识. 定义: Goog month : 该月第一个工作日为星期一的月份 Luckly mo ...
- POJ 3393 Lucky and Good Months by Gregorian Calendar 模拟题
题目:http://poj.org/problem?id=3393 不多说了,简单模拟题,因为粗心写错了两个字母,导致错了N遍,模拟还是一贯的恶心,代码实在不想优化了,写的难看了点.. #includ ...
- POJ 3393 Lucky and Good Months by Gregorian Calendar
http://poj.org/problem?id=3393 题意 : 对于这篇长长的英语阅读,表示无语无语再无语,花了好长时间,终于读完了.题目中规定每周的周六日为假日,其他为工作日,若是一个月的第 ...
- poj 3393 Lucky and Good Months by Gregorian Calendar(模拟)
题目:http://poj.org/problem?id=3393一道题目挺长的模拟题,参考了网上大神的题解. #include <iostream> #include <cstdi ...
- Lucky and Good Months by Gregorian Calendar(模拟)
http://poj.org/problem?id=3393 好大的一道模拟题,直接当阅读理解看了.下面是大神写的题意,解释的好详细. 定义: Goog month : 该月第一个工作日为星期一的月份 ...
- LeetCode初级算法--动态规划01:爬楼梯
LeetCode初级算法--动态规划01:爬楼梯 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net ...
- 算法-动态规划 Dynamic Programming--从菜鸟到老鸟
算法-动态规划 Dynamic Programming--从菜鸟到老鸟 版权声明:本文为博主原创文章,转载请标明出处. https://blog.csdn.net/u013309870/ar ...
随机推荐
- hdu 5751 Eades
题意:对于整数序列$A[1...n]$定义$f(l, r)$为区间$[l, r]$内等于区间最大值元素的个数,定义$z[i]$为所有满足$f(l, r)=i$的区间总数.对于所有的$1 \leq i ...
- abort终止正在进行中的的ajax请求
核心:调用XMLHttpRequest对象上的abort方法 jQuery的ajax方法有自己的超时时间设置参数: $.ajax({type:'POST', url:'b.php', data:' ...
- linux下route命令使用实战
配置路由表: 第一步: sudo route add -net 172.30.6.0 netmask 255.255.255.0 eth0 执行后可以使用命令route -n查看,查看内容如下: 17 ...
- LTE Module User Documentation(翻译15)——示例程序、参考场景以及故障检测和调试技巧
LTE用户文档 (如有不当的地方,欢迎指正!) 21 Examples Programs(示例程序) 路径 src/lte/examples/ 包含一些示例仿真程序,这些例子表明如何仿真不 ...
- Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’解决方法 + Linux启动/停止/重启Mysql数据库的方法
启动mysql 报错: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/m ...
- mysql的初识--DOS下的简单命令
DOS下进入 1.通过程序中的mySQL的:MySQL 5.6 Command Line Client直接进入mySQL的命令行: 2.或者通过WIn+R-->输入cmd,然后C:等一层一层找到 ...
- hdu 5358 First One
题目链接:hdu 5358 思路不难理解,就是个尺取法而已,floor(log2X) + 1 就是求 X 的二进制表示的位数,对于题目来说这个值最多只是 30+,从这里入手开始枚举,运用尺取法可以达到 ...
- C#连接数据库的新方法(通过web.config配置文件)
分类: asp.net技术 2009-07-08 19:40 183人阅读 评论(0) 收藏 举报 方法一. 1.web.config中<configuration>下加入以下连接代码 ...
- 第5章 Web自动化测试
5.1 Selenium简介 5.1.1 自动化测试简介 5.1.2 Selenium简介 5.2 Selenium2环境搭建 5.3 Java基础 5.3.1 新建Java工程和类 5.3.2 Ec ...
- yii2-basic后台管理功能开发之二:创建CRUD增删改查
昨天实现了后台模板的嵌套,今天我们可以试着创建CRUD模型啦 刚开始的应该都是“套用”,不再打算细说,只把关键的地方指出来. CRUD即数据库增删改查操作.可以理解为yii2为我们做了一个组件,来实现 ...