#D0994. 日期换算

日期换算

题目描述

33DAI 在整理一份日程记录。他把 20262026 年 11 月 11 日记作第 11 天,此后每过一天编号加一:20262026 年 11 月 22 日是第 22 天,20262026 年 11 月 3131 日是第 3131 天,依此类推。

日期由年、月、日组成。一年有 1212 个月:11、33、55、77、88、1010、1212 月各有 3131 天,44、66、99、1111 月各有 3030 天,22 月平年有 2828 天、闰年有 2929 天。两种规则下月份的天数都不变,唯一的区别是哪些年份是闰年:

  • 规则一(现行公历,即格里高利历):年份 yy 是闰年,当且仅当(yy 能被 44 整除,且 yy 不能被 100100 整除),或者(yy 能被 400400 整除)。
  • 规则二:在规则一的基础上再加一条 —— 若 yy 能被 32003200 整除,则 yy 不是闰年。

给定 tt 个整数 xx,33DAI 想知道:第 xx 天在两种规则下分别是哪一年哪一月哪一日。

输入格式

从标准输入读入数据。

输入的第一行是一个整数 tt(1≤t≤1051 \le t \le 10^5),表示询问的个数。

接下来 tt 行,每行一个整数 xx(1≤x≤10181 \le x \le 10^{18}),表示一次询问。

输出格式

输出到标准输出。

输出 tt 行,顺序与输入一致。对每个询问输出一行六个整数 y1,m1,d1,y2,m2,d2y_1, m_1, d_1, y_2, m_2, d_2,用一个空格隔开:

  • y1,m1,d1y_1, m_1, d_1:第 xx 天在规则一下的年、月、日;
  • y2,m2,d2y_2, m_2, d_2:第 xx 天在规则二下的年、月、日。

年、月、日都不补前导零。

2
1
2
2026 1 1 2026 1 1
2026 1 2 2026 1 2
3
365
366
731
2026 12 31 2026 12 31
2027 1 1 2027 1 1
2028 1 1 2028 1 1
3
428854
428855
428856
3200 2 29 3200 3 1
3200 3 1 3200 3 2
3200 3 2 3200 3 3
1
1000000000000000000
2737907006990533 8 20 2737909349534656 4 26

样例解释

  • 样例 1:第 11 天即 20262026 年 11 月 11 日,第 22 天是它的后一天,即 20262026 年 11 月 22 日;两种规则下这两天的日期相同。
  • 样例 2:20262026 年是平年,有 365365 天,所以第 365365 天是 20262026 年 1212 月 3131 日,第 366366 天是 20272027 年 11 月 11 日;20272027 年也有 365365 天,所以第 731731 天是 20282028 年 11 月 11 日。
  • 样例 3:32003200 能被 400400 整除,按规则一是闰年,22 月有 2929 天;按规则二它不是闰年,22 月只有 2828 天。所以第 428854428854 天在规则一下是 32003200 年 22 月 2929 日,在规则二下是 32003200 年 33 月 11 日;第 428855428855 天在规则一下是 32003200 年 33 月 11 日,在规则二下是 32003200 年 33 月 22 日。

提示

  • 第 xx 天可能落在很远的将来(年份最大接近 3×10153 \times 10^{15}),读入与计算请使用 6464 位整型;输出 tt 行,每行六个整数用单个空格隔开,年、月、日都不补前导零。

数据范围

对于所有测试数据,保证 1≤t≤1051 \le t \le 10^5,1≤x≤10181 \le x \le 10^{18}。

子任务 分值 测试点数 限制
11 3030 55 x≤105x \le 10^5,t≤10t \le 10
22 x≤1012x \le 10^{12},t≤103t \le 10^3
33 4040 无额外限制

共 1515 个测试点,按测试点计分:子任务 11、22 的每个测试点 66 分,子任务 33 的每个测试点 88 分。