datetime
提供了一系列方便的日期计算工具,可以处理许多时日期相关的计算。
(当然关键是避免手动处理闰年的进位问题)
代码提交地址:http://acm.zjnu.edu.cn/CLanguage/contests/1170/problems/1003.html
import datetime as dt
import bisect
'''
@Source: myself
@Author: Tieway59
@Description: 输入一个'%d.%m.%Y.'的日期,输出下一个日月年回文的日期。
- strftime 表示时间格式化字符串
- strptime 表示模式匹配读入时间
- datetime.timedelta(days=1) 表示设定一个时间变化量,可以用来加减
- bisect.bisect_left 二分查找第一个大于等于x的下标
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(0001-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
'''
'''
s = dt.datetime.strptime('01.01.0001.', '%d.%m.%Y.')
# t = dt.datetime.strptime('31.12.9999.', '%d.%m.%Y.')
# d = dt.timedelta(days=1)
l = [...] # 打表
# def ispal(p) -> bool:
# return p == p[::-1]
#
#
# while cur < t:
# if ispal(cur.strftime('%d%m%Y')):
# l.append((cur - s).days)
# cur = cur + d
ans = []
n = int(input().strip())
for i in range(0, n):
x = (dt.datetime.strptime(input().strip(), '%d.%m.%Y.') - s).days
d = bisect.bisect_left(l, x + 1)
ans.append((s + dt.timedelta(days=l[d])).strftime('%d.%m.%Y.'))
print('\n'.join(ans))
'''
1
02.02.2020.
2
01.01.1000.
31.12.2026.
3
01.01.0100.
05.07.0321.
05.05.0505.
'''