首页 > 代码库 > hihoCoder 1148 2月29日
hihoCoder 1148 2月29日
时间限制:2000ms
单点时限:1000ms
内存限制:256MB
描述
给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期)。
只有闰年有2月29日,满足以下一个条件的年份为闰年:
1. 年份能被4整除但不能被100整除
2. 年份能被400整除
输入
第一行为一个整数T,表示数据组数。
之后每组数据包含两行。每一行格式为"month day, year",表示一个日期。month为{"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November" , "December"}中的一个字符串。day与year为两个数字。
数据保证给定的日期合法且第一个日期早于或等于第二个日期。
输出
对于每组数据输出一行,形如"Case #X: Y"。X为数据组数,从1开始,Y为答案。
数据范围
1 ≤ T ≤ 550
小数据:
2000 ≤ year ≤ 3000
大数据:
2000 ≤ year ≤ 2×109
- 样例输入
4January 12, 2012March 19, 2012August 12, 2899August 12, 2901August 12, 2000August 12, 2005February 29, 2004February 29, 2012
- 样例输出
Case #1: 1Case #2: 0Case #3: 1Case #4: 3
题目大意我就不说嘞!这题很容易就能读懂。
这题如果直接用for循环跑一边找闰年的话,对于小数据可能回A但是大数据就会TLE
so~这题我们可以直接求出两个时间段之间 闰年的个数(即2月29日的个数)1 #include <stdio.h> 2 #include <string.h> 3 #include <iostream> 4 #include <string> 5 #include <algorithm> 6 #define ll long long 7 using namespace std; 8 9 char month[12][20] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November" , "December"};10 int f(char a[]) // 返回对应的月份11 {12 int i;13 for (i = 0; i < 12; i ++)14 {15 if (strcmp(a,month[i])==0)16 break;17 }18 return i+1;19 }20 int main ()21 {22 ll start_year,start_day;23 ll end_year,end_day;24 char smonth[20],emonth[20];25 int i,t,ff;26 while (~scanf("%d",&t))27 {28 ff = 1;29 while (t --){30 scanf("%s %lld, %lld",smonth,&start_day,&start_year);31 scanf("%s %lld, %lld",emonth,&end_day,&end_year);32 if (f(smonth)==1 || (f(smonth)==2&&start_day<=29)) // 判断给定的两个时间是否包含2月29日33 start_year --;34 if (f(emonth)==1 || (f(emonth)==2&&end_day<29))35 end_year --;36 ll sum = 0; // 利用判断闰年的方法求闰年的个数37 sum = end_year/4 - start_year/4; //能被4整数的 38 sum = sum - (end_year/100 - start_year/100); // 减去 能被100整数的39 sum += ((end_year/400 - start_year/400)); // 加上 能被400整除的40 41 printf("Case #%d: %lld\n",ff ++,sum);42 }43 44 }45 return 0;46 }
hihoCoder 1148 2月29日
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。