A. AD 2020

A. 公元 2020 年
每次测试的时间限制1秒
每个测试的内存限制256 MB


2020 年是当年,是闰年,从公历的星期三开始,即公元 2020 年 (CE) 和纪元年 (AD),第三个千年的第 20 年,21 世纪的第 20 年世纪,以及 2020 年代十年的第一年。

2020年被世界卫生组织指定为护士和助产士年。联合国已宣布 2020 年为国际植物健康年。 2020 年被国际声学委员会指定为国际声音年。

因为2020年发生了太多令人难忘的事情,所以现在有人提议将所有子字符串包含“202”的日期指定为减灾日。我们以 YYYYMMDD 的格式表示一个日期(例如 21110202),那么如果 202 是这个日期的子串,那么这一天就是减灾日。

请编写一个程序计算 Y1M1D1 和 Y2M2D2 之间的所有日期(包括两个日期)中的减灾天数?请注意,您应该考虑闰年。闰年是可以被 400 整除或可以被 4 整除但不能被 100 整除的年份。闰年的二月有 29 天,而不是正常的 28 天。

输入
输入包含多个案例。输入的第一行包含一个正整数 T (1≤T≤105),即事例数。

每个案例的第一行也是唯一一行包含六个整数 Y1,M1,D1,Y2,M2,D2,它们在上面的问题陈述中进行了描述。

保证 Y1M1D1 不大于 Y2M2D2。 Y1M1D1 和 Y2M2D2 都在 20000101 和 99991231 之间,两个日期都有效。

温馨提示,这个问题的输入和输出量可能很大,所以建议使用更快的 I/O 方法。例如,在 C++ 中,您可以使用 scanf/printf 代替 cin/cout。

输出
对于每种情况,打印一行包含一个整数,即答案。

例子
输入
3
2111 02 01 2111 02 03
2202 01 01 2202 12 31
2000 01 01 9999 12 31
输出
1
365
44294

样例解释
在第一个示例中,21110202 是唯一的减灾日。 

在第二个示例中,202 是 2202 的子字符串,因此 2202 年的每一天都是减灾日!

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int f[N];
int mon[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

bool check(int y) //判断闰年
{
	if((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) return true;
	return false;
}

int main()
{
	//二分下标为个数,存储含有202的日期
	//预处理
	int cnt = 0;
	for(int y = 2000; y<=9999; y++)
	{
		if(check(y)) mon[2] = 29;
		else mon[2] = 28;
		for(int m=1; m<=12; m++)
		{
			for(int d=1; d<=mon[m]; d++)
			{
				int s1 = y*10000 + m*100 + d;
				string s = to_string(s1);
				if(s.find("202") != -1)
					f[++cnt] = s1;
			}
		}
	}
	int T;
	cin >> T;
	while(T --)
	{
		int y1, m1, d1, y2, m2, d2;
		cin >> y1 >> m1 >> d1 >> y2 >> m2 >> d2;
		int start = y1*10000 + m1*100 + d1;
		int end = y2*10000 + m2*100 + d2;
		int l = lower_bound(f+1, f+1+cnt, start) - f;
		int r = upper_bound(f+1, f+1+cnt, end) - f;
		cout << r - l << endl;
	}
	return 0;
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值