ZZULLI OJ Contest - 东北省赛训练赛 Problem E: 蛤玮准备礼物【区间求和(打表思想),闰年,容斥】

Problem E: 蛤玮准备礼物

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 870   Solved: 144

Submit Status Web Board

Description


蛤玮的妹子要过生日了,经过千挑万选,蛤玮决定给妹子买一盒水彩铅笔,然而卖多少个才合适呢.机智的蛤玮决定数一数今天是妹子出生的第多少天,然后就买那么多根铅笔.

给出蛤玮妹子的生日和今天的日期,求蛤玮一共需要买多少.

注意:生日当天算第0天.

Input


T(1<=T<=1000),表示数据组数.

每组数据一行y1,m1,d1,y2,m2,d2,其中y1,m1,d1表示妹子生日的年月日,y2,m2,d2表示蛤玮所在时空的当前天的年月日.

(1900<=y<=1000000, 1<=m<=12, 1<=d<=当月应有天数).输入保证当前天在妹子生日之后.

Output


每组数据输出一行,蛤玮要买多少根铅笔.

Sample Input

21995 10 24 1995 10 251996 1 9 1996 3 7

Sample Output

158

     看起来很简单,实现起来可不容易,一看数据大,得用数学方法,却不到讨论的好麻烦,突然想起来用打表的方法求出两个区间和 再相减不就是答案吗,但是最后怎么交都不对,感觉自己思路没错,看看别人的代码发现自己的闰年400年没判断,在求区间有多少闰年时没有把400年的部分加上(画图形来理解);

     这次路过的比赛做一下,总结一下还是不够熟练,会的题不能迅速过掉,有思路的题思考太久 失误太多,有必要多打比赛锻炼自己。


AC代码:

#include<cstdio>

typedef long long LL;
LL a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

bool judge(LL y,LL m)
{
	return ((y%4==0&&y%100!=0)||y%400==0)&&m>2;
}
int main()
{
	LL T,y1,y2,m1,m2,d1,d2;
	scanf("%lld",&T);
	while(T--)
	{
		scanf("%lld %lld %lld %lld %lld %lld",&y1,&m1,&d1,&y2,&m2,&d2);
		LL s1=365*(y1-1),s2=365*(y2-1),t1=(y1-1)/4-(y1-1)/100+(y1-1)/400,t2=(y2-1)/4-(y2-1)/100+(y2-1)/400;//容斥定理运用
		s1+=t1; s2+=t2; int i=0;
		for(i=1;i<m1;++i) s1+=a[i]; s1+=d1;
		for(i=1;i<m2;++i) s2+=a[i]; s2+=d2;
		if(judge(y1,m1))  s1++;
		if(judge(y2,m2))  s2++;
		
		printf("%lld\n",s2-s1);
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值