lightoj - 1414 February 29

February 29

Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu

Submit Status

Description

It is 2012, and it‘s a leap year. So there is a "February 29" in this year, which is called leap day. Interesting thing is the infant who will born in this February 29, will get his/her birthday again in 2016, which is another leap year. So February 29 only exists in leap years. Does leap year comes in every 4 years? Years that are divisible by 4 are leap years, but years that are divisible by 100 are not leap years, unless they are divisible by 400 in which case they are leap years.

In this problem, you will be given two different date. You have to find the number of leap days in between them.

Input

Input starts with an integer T (≤ 550), denoting the number of test cases.

Each of the test cases will have two lines. First line represents the first date and second line represents the second date. Note that, the second date will not represent a date which arrives earlier than the first date. The dates will be in this format - "month day, year", See sample input for exact format. You are guaranteed that dates will be valid and the year will be in between 2 * 103 to 2 * 109. For your convenience, the month list and the number of days per months are given below. You can assume that all the given dates will be a valid date.

Output

For each case, print the case number and the number of leap days in between two given dates (inclusive).

Sample Input

4

January 12, 2012

March 19, 2012

August 12, 2899

August 12, 2901

August 12, 2000

August 12, 2005

February 29, 2004

February 29, 2012

Sample Output

Case 1: 1

Case 2: 0

Case 3: 1

Case 4: 3

Source

Problem Setter: Md. Arifuzzaman Arif

Special Thanks: Jane Alam Jan

#include <map>
#include <cstdio>
#include <iostream>
using namespace std;
map<string,int> mp;
char month[20][25]={"January",
 "February", "March", "April",
  "May", "June", "July", "August",
   "September", "October", "November",
   "December"};
bool judge(int y)
{
    if((y%4==0 && y%100 !=0) || y%400 ==0)
        return true;
    return false;
}

int main()
{
    for(int i=0; i< 12; i++)
        mp[month[i]]= i+1;

    int t, Q=1; scanf("%d", &t);
    while(t--)
    {
        char a[25];
        int m, y;
        scanf("%s%d,%d", a, &m, &y);
        int t1=0, t2 =0;
        int bb=mp[a];
        if(judge(y))
        {
            if(bb>2)
                y++;
        }
        y--;
        t1+=y/4-y/100+y/400;
        scanf("%s%d,%d", a, &m, &y);
        if(judge(y))
        {
            if(mp[a]>2|| (mp[a]== 2 && m==29))
                y++;
        }
        y--;
        t2= t2+y/4-y/100+y/400;
        printf("Case %d: %d\n", Q++, t2-t1);
    }
    return 0;
}
时间: 2024-11-05 00:42:15

lightoj - 1414 February 29的相关文章

February 29(模拟)

D - D Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Status Practice LightOJ 1414 Description It is 2012, and it's a leap year. So there is a "February 29" in this year, which is called leap day. Interestin

lightoj Beginners Problems

很多以前写的丑代码 1000 - Greetings from LightOJ #include<math.h> #include<stdio.h> #include<stdlib.h> #include<string.h> int main(void) { int a,b,n,Case; scanf("%d",&n); Case=0; while(Case++,n--) { scanf("%d%d",&

LightOJ Beginners Problems 部分题解

相关代码请戳 https://coding.net/u/tiny656/p/LightOJ/git 1006 Hex-a-bonacci. 用数组模拟记录结果,注意取模 1008 Fibsieve's Fantabulous Birthday. 找规律题,左边列是1 3平方 5平方......下边行是1 2平方 4平方......,找到当前数被包夹的位置,然后处理一下位置关系,注意奇偶. 1010 Kinghts in Chessboard. 规律题,对于m,n大于2的情况下,使用交叉放置的方法

light oj Beginners Problems

很多以前写的丑代码 1000 - Greetings from LightOJ #include<math.h> #include<stdio.h> #include<stdlib.h> #include<string.h> int main(void) { int a,b,n,Case; scanf("%d",&n); Case=0; while(Case++,n--) { scanf("%d%d",&

2月29日(编程之美2015资格赛)

时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: 1. 年份能被4整除但不能被100整除 2. 年份能被400整除 输入 第一行为一个整数T,表示数据组数. 之后每组数据包含两行.每一行格式为"month day, year",表示一个日期.month为{"January", "February",

hihoCoder 1148 2月29日

时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: 1. 年份能被4整除但不能被100整除 2. 年份能被400整除 输入 第一行为一个整数T,表示数据组数. 之后每组数据包含两行.每一行格式为"month day, year",表示一个日期.month为{"January", "February",

2月29日

我自己写的代码测试论坛上的数据都通过的,但是就是通不过OJ,应该是超时,给大家提供一种思路吧. 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: 年份能被4整除但不能被100整除 年份能被400整除 输入 第一行为一个整数T,表示数据组数. 之后每组数据包含两行.每一行格式为"month day, year",表示一个日期.month为{

2015编程之美 2月29日(求闰年的个数)

<span style="font-size:14px;">// 描述 // 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). // 只有闰年有2月29日,满足以下一个条件的年份为闰年: // 1. 年份能被4整除但不能被100整除 // 2. 年份能被400整除 // 输入 // 第一行为一个整数T,表示数据组数. // 之后每组数据包含两行.每一行格式为"month day, year",表示一个日期.month为{"J

hiho 编程之美2015资格赛(2月29日-模拟日期)

题目1 : 2月29日 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: 1. 年份能被4整除但不能被100整除 2. 年份能被400整除 输入 第一行为一个整数T,表示数据组数. 之后每组数据包含两行.每一行格式为"month day, year",表示一个日期.month为{"January", "Feb