http://poj.org/problem?id=3393

题意 : 对于这篇长长的英语阅读,表示无语无语再无语,花了好长时间,终于读完了。题目中规定每周的周六日为假日,其他为工作日,若是一个月的第一个工作日是周一,就定义这个月为good,若是一个周的最后一个工作日是周五,就定义这个月为luck。给你一个起始年月,一个终止年月,让你求出在这中间有多少luck月有多少good月。当然了,若是一整片文章就写了这点东西那也就太废话了,所以题目中还给出了几点应该注意的:

1.在1582年以前,只要年份取余4为0就为闰年,在1582年以后,年份取余4为0且取余100不为0或者是取余400为0才是闰年。

2.由于历史原因,1752年9月3日到9月13日是不存在的,也就是说1752年9月是少了11天的,只有19天。

3.由于历史原因,1700年无条件为闰年。

4.该历法从1年1月1日开始,这天为周六。

5.该历法每周有7天,从周六开始为第一天。

思路 :好麻烦的一道模拟题。。。。若是前一个月是luck,则下一个月必定为good,所以两个计数器可以同步,但是因为有边界问题,若是给出的起始月份是good,则前一个月份是不能够加进来的,而若是给定的终止月份是luck,那下一个月也不能加进来。为了算时好算,直接把从1年1月1日到起始日期的天数加了1,这也是为了防止出边界。所以,先算了起始月份是否是good,剩下的从起始月份开始,算的都是月份加1是不是good,luck。也就是说虽然写的是第 i 个月怎么样,但实际上,我们算的都是 i+1是不是good luck。算1年1月1日时,总的天数初始化为了1,使得直接加到了起始年份月份的第一天了,所以你每加一个月的天数,就直接加到了下一个月的第一天了,所以判断的就是下一个月的。

#include <iostream>
using namespace std ;
int mon[] = {,,,,,,,,,,,,} ;
int leapmon[] = {,,,,,,,,,,,,} ;
bool leap(int n)
{
if(n < )
{
if(n % == )
return true ;
return false ;
}
else
{
if((n% == &&n%!=)||(n% == )||n==)
return true;
return false ;
}
}
int sum(int startyear,int startmonth)
{
int day = ;
for(int i = ; i < startyear ; i++)
{
if(leap(i))
day += ;
else day += ;
}
for(int i = ; i < startmonth ; i++)
if(leap(startyear))
day += leapmon[i] ;
else day += mon[i] ;
if(startyear > ||(startyear == &&startmonth > ))
day -= ;
return day ;
}
int main()
{
int t ;
cin>>t ;
while(t--)
{
int startyear ,startmon ,endyear,endmon ;
cin>>startyear>>startmon>>endyear>>endmon ;
int day = sum(startyear,startmon) ;
int good = ,luck = ;
if(((day+)% == ) || ((day+)% == )||((day+)% == ))
good++ ;
int j ;
for(int i = startyear ; i < endyear ; i++)
{
i == startyear ? j = startmon : j = ;
for( ; j <= ; j++)
{
if(leap(i))
day += leapmon[j] ;
else day += mon[j] ;
if(i == &&j == )
day -= ;
if(((day+)% == ) || ((day+)% == )||((day+)% == ))
{good++ ;luck++ ;}
}
}
startyear == endyear ? j = startmon : j = ;
for( ; j <= endmon ; j++)
{
if(leap(endyear))
day += leapmon[j] ;
else day += mon[j] ;
if(endyear == && j == )
day -= ;
if(((day+)% == ) || ((day+)% == )||((day+)% == ))
{
if(j != endmon)
good++ ;
luck++ ;
}
}
cout<<luck<<" "<<good<<endl ;
}
return ;
}

POJ 3393 Lucky and Good Months by Gregorian Calendar的更多相关文章

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

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

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

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

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

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

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

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

  5. Lucky and Good Months by Gregorian Calendar(poj 3393)

    大致题意: 科普文一篇,文章80%都是无用信息,因为都是常识,但是又不得不看,因为有20%是常人不知道的历史常识. 定义: Goog month : 该月第一个工作日为星期一的月份 Luckly mo ...

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

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

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

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

  8. poj 2346 Lucky tickets(区间dp)

    题目链接:http://poj.org/problem?id=2346 思路分析:使用动态规划解法:设函数 d( n, x )代表长度为n且满足左边n/2位的和减去右边n/2位的和为x的数的数目. 将 ...

  9. poj3393[模拟题]

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

随机推荐

  1. android输入框显示在软键盘上边

    有时候在界面需要输入的时候,如果输入框在界面的下方,软键盘弹出的时候会遮挡输入框界面,对用户的体验不是很好. 在网上找的别人的解决方案 首先: 清单文件里面配置:android:windowSoftI ...

  2. win7 服务详解-系统优化

    Adaptive Brightness监视氛围光传感器,以检测氛围光的变化并调节显示器的亮度.如果此服务停止或被禁用,显示器亮度将不根据照明条件进行调节.该服务的默认运行方式是手动,如果你没有使用触摸 ...

  3. Android Animation学习笔记

    原文地址: http://www.cnblogs.com/feisky/archive/2010/01/11/1644482.html 关于动画的实现,Android提供了Animation,在And ...

  4. java新手笔记27 监听器类

    1.外部类监听 package com.yfs.javase; import java.awt.Button; import java.awt.FlowLayout; import java.awt. ...

  5. EL表达式获取Map和List中的值

    EL表达式获取Map和List中的值   EL表达式取Map中的值: 当Map中是String,String时 后台servlet中: Map<String, String> map1 = ...

  6. 暑假集训(5)第一弹——— Super Jumping! Jumping! Jumping!(hdu1087)

    题意概括:在上次与娑殚的三次博弈中,你们都取得了胜利.便向娑殚提出要求,借助他的力量,传送到一个安全的地方. 你们的愿望达成了,不过,你和小A似乎失散了. 街上人来人往的特别热闹,每一个人的脸上都洋溢 ...

  7. lex&yacc4

    yacc: we cannt use the $$ value dirictly. we need get it irrotly;

  8. OpenCV和Matplotlib色彩空间模式不一致的问题

    当用OpenCV读取彩色图像时,OpenCV是以(BGR)的顺序存储图像数据的,而Matplotlib是以(RGB)的顺序显示图像的. 可以用下面的程序来证明这一点 import cv2 import ...

  9. 关于webview嵌入swf

    有的机子CPU不支持swf播放的,不知道你是不是中奖了.. webview 加载swf很简单:         if(versionDouble>=2.2){//版本低于2.2的系统无法播放sw ...

  10. DirectSound学习(三)--类、方法、属性翻译

    DirectSound.Device :Contains methods and properties used to create buffer objects, manage devices, a ...