#K. [NOIP2016 普及组] 回文日期

    Type: Default 1000ms 256MiB

[NOIP2016 普及组] 回文日期

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

题目背景

NOIP2016 普及组 T2

题目描述

在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。

牛牛习惯用 88 位数字表示一个日期,其中,前 44 位代表年份,接下来 22 位代表月份,最后 22 位代表日期。显然:一个日期只有一种表示方法,而两个不同的日期的表示方法不会相同。

牛牛认为,一个日期是回文的,当且仅当表示这个日期的 88 位数字是回文的。现在,牛牛想知道:在他指定的两个日期之间包含这两个日期本身),有多少个真实存在的日期是回文的。

一个 88 位数字是回文的,当且仅当对于所有的 ii1i81 \le i \le 8)从左向右数的第 ii 个数字和第 9i9-i 个数字(即从右向左数的第 ii 个数字)是相同的。

例如:

  • 对于 2016 年 11 月 19 日,用 88 位数字 2016111920161119 表示,它不是回文的。
  • 对于 2010 年 1 月 2 日,用 88 位数字 2010010220100102 表示,它是回文的。
  • 对于 2010 年 10 月 2 日,用 88 位数字 2010100220101002 表示,它不是回文的。

每一年中都有 1212 个月份:

其中,1,3,5,7,8,10,121, 3, 5, 7, 8, 10, 12 月每个月有 3131 天;4,6,9,114, 6, 9, 11 月每个月有 3030 天;而对于 22 月,闰年时有 2929 天,平年时有 2828 天。

一个年份是闰年当且仅当它满足下列两种情况其中的一种:

  1. 这个年份是 44 的整数倍,但不是 100100 的整数倍;
  2. 这个年份是 400400 的整数倍。

例如:

  • 以下几个年份都是闰年:2000,2012,20162000, 2012, 2016
  • 以下几个年份是平年:1900,2011,20141900, 2011, 2014

输入格式

两行,每行包括一个 88 位数字。

第一行表示牛牛指定的起始日期。

第二行表示牛牛指定的终止日期。

保证 date1\mathit{date}_1date2\mathit{date}_2 都是真实存在的日期,且年份部分一定为 44 位数字,且首位数字不为 00

保证 date1\mathit{date}_1 一定不晚于 date2\mathit{date}_2

输出格式

一个整数,表示在 date1\mathit{date}_1date2\mathit{date}_2 之间,有多少个日期是回文的。

样例 #1

样例输入 #1

20110101
20111231

样例输出 #1

1

样例 #2

样例输入 #2

20000101
20101231

样例输出 #2

2

提示

【样例说明】

对于样例 1,符合条件的日期是 2011110220111102

对于样例 2,符合条件的日期是 20011002200110022010010220100102

【子任务】

对于 60%60 \% 的数据,满足 date1=date2\mathit{date}_1 = \mathit{date}_2

二期集训 Day 3 —— 枚举

Not Claimed
Status
Done
Problem
13
Open Since
2024-8-21 0:00
Deadline
2024-8-31 23:59
Extension
24 hour(s)