编程之美2015第一题
来源:互联网 发布:c语言中for什么意思 编辑:程序博客网 时间:2024/04/30 12:24
描述
给定两个日期,计算这两个日期之间有多少个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
这道题由于数据量是1e9
所以用循环必死。
这里我们用到了容斥的原理,之余容斥是什么,自己去脑补,我也是学长给我讲了以后才知道的
由于我们需要(能被400整除和能被4但是不能被100整除的数),所以我们:能被4整除的数的个数+能被4整除的
-能被100整除的数的个数,这我们就算出了在年分a以前的闰年个数。
这里由于我们只关心年分,所以我在之前把年分处理了一下
#include<stdio.h>
#include<iostream>#include<string>
#include<string.h>
#include<vector>
#include<algorithm>
#include<queue>
#include<stack>
#include<math.h>
#include<map>
//#define nn 110
#define inff 0x3fffffff
#define nn 20000007
#define maxx 2e9
#define ll long long
using namespace std;
char cc[20][10]={ "January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November" ,
"December"
};
int main()
{
ll day1,year1,month1;
ll day2,year2,month2;
ll a400,a100,a4;
ll b400,b100,b4;
char mo1[10],mo2[10], dian;
ll i,j,i1;
ll n;
ll cntmon;
while(scanf("%lld",&n)!=EOF)
{
for(i1=1;i1<=n;i1++)
{
cntmon=0;
scanf("%s %lld %c %lld",mo1,&day1,&dian,&year1);
scanf("%s %lld %c %lld",mo2,&day2,&dian,&year2);
for(i=0;i<12;i++)
{
if(strcmp(mo1,cc[i])==0)
{
month1=i+1;
break;
}
}
for(i=0;i<12;i++)
{
if(strcmp(mo2,cc[i])==0)
{
month2=i+1;
break;
}
}
if(month1>=3)
{
year1++;
}
if(month2==2)
{
if(day2<29)
{
year2--;
}
}
else if(month2<2)
{
year2--;
}
a4=year1/4;
a400=year1/400;
a100=year1/100;
b4=year2/4;
b400=year2/400;
b100=year2/100;
ll g1=0,g2=0;
ll flag1=0,flag2=0;
if(year2%400==0||(year2%4==0&&year2%100!=0))
flag2=1;
if(year1%400==0||(year1%4==0&&year1%100!=0))
flag1=1;
if(year1==year2)
{
if(year2%400==0||(year2%4==0&&year2%100!=0))
cntmon=1;
}
else
{
if(flag1==0&&flag2==1)
{
cntmon=b4+b400-b100-(a4+a400-a100);
}
else if(flag1==1&&flag2==0)
{
cntmon=b4+b400-b100-(a4+a400-a100)+1;
}
else if(flag1==1&&flag2==1)
{
cntmon=b4+b400-b100-(a4+a400-a100)+1;
}
else if(flag1==0&&flag2==0)
{
cntmon=b4+b400-b100-(a4+a400-a100);
}
}
//printf("*** %lld %lld *****\n",year1,year2);
ll pp=0;
for(i=year1;i<=year2;i++)
{
if(i%400==0||(i%4==0&&i%100!=0))
pp++;//
// cntmon++;
}
// cntmon=cnt[0]+cnt[1]-cnt[2];
// printf("&&&&&&&& %lld\n",pp);
printf("Case #%lld: %lld\n",i1,cntmon);
}
}
}
0 0
- 微软编程之美2015 第一题
- 2015编程之美资格赛第一题
- 2015编程之美资格赛第一题
- 编程之美2015第一题
- 编程之美 第一场 第一题
- 2015编程之美 该死的第一题
- 编程之美大赛资格赛第一题
- 编程之美2015初赛第一场 题解
- 2015编程之美初赛第一场 B 建造金字塔
- 2015编程之美初赛第一场 C 质数相关
- 2015编程之美初赛第一场 B 建造金字塔
- 编程之美2015初赛第一场BC
- 编程之美资格赛第一题:传话游戏
- 微软2013 编程之美 第一题 传话游戏
- 编程之美大赛第一题 传话游戏
- 编程之美2013 资格赛 第一题 解题报告
- 2014 编程之美 资格赛 第一题 同构
- 2014编程之美初赛第一场第二题
- iptables基础知识
- DTO mysql
- JAVA获取url中json数据
- POJ2296.Map Labeler——2-sat二分最大值+可行性判断
- SpringMVC 文件上传配置,多文件上传,使用的MultipartFile
- 编程之美2015第一题
- 分布式服务框架远程服务通讯性能比较
- Memcached-学习(一)安装&常规错误&监控
- 道格拉斯算法
- git 简明指南
- 斐波那契数列
- Callable,Runnable比较及用法
- android 圆形头像
- hibernate 三种状态详解