ZZULIOJ 1878: 蛤玮准备礼物

1878: 蛤玮准备礼物

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 850   Solved: 138

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

2
1995 10 24 1995 10 25
1996 1 9 1996 3 7

Sample Output

1
58

HINT

Source

思路:首先 1900<=y<=1000000 数比较大,直接算 就会超时,所以要优化,每400年为1闰年,利用这个减少计算的次数。
这样的计算天数的题很考验自己的模拟能力
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
bool judge(int x)//判断闰年 
{
	if((x%4==0&&x%100!=0)||x%400==0)
	return true;
	return false;
}
int day(int x,int y)//返回每月的天数 
{
	if(y==1||y==3||y==5||y==7||y==8||y==10||y==12)
	return 31;
	else if(judge(x)==true&&y==2)
	return 29;
	else if(judge(x)==false&&y==2)
	return 28;
	else return 30;
}
int main()
{
	int t;
    int sum,a,b,c,x,y,z,i,j,k;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d%d%d%d%d",&a,&b,&c,&x,&y,&z);
		int num1=0;
		int num2=0;
		
		for(i=1;i<b;i++)
		num1+=day(a,i);
		num1+=c;
		for(i=1;i<y;i++)
		num2+=day(x,i);
		num2+=z;
		if(a==x)//同一年 
		{
			printf("%d\n",num2-num1);
		}
		else
		{
		    sum=0;
			if(judge(a)==true)
			sum+=(366-num1+num2);
			else
			sum+=(365-num1+num2);
			if((x-1-(a+1))>400)//每400年一循环 
			{
				int flag=(x-1-(a+1))/400;
				int sum1=0;
				for(i=a+1;i<=a+400;i++)
				{
					if(judge(i)==true)
					sum1+=366;
					else sum1+=365;
				}
				sum+=flag*sum1;
				int year=a+1+flag*400;
				for(i=year;i<=x-1;i++)
				{
					if(judge(i)==true)
					sum+=366;
					else sum+=365;
				}
				
			}
			else
			{
				for(i=a+1;i<x;i++)
				{
					if(judge(i)==true)
					sum+=366;
					else sum+=365;
				}
			}
			printf("%d\n",sum);
		}
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值