#P3393. Lucky and Good Months by Gregorian Calendar

Lucky and Good Months by Gregorian Calendar

描述
你是否曾好奇为什么通常一年有365天,而不是400天?为什么八月有31天,而二月只有28天?为什么一周有7天,而不是6天?古代人使用的日历和我们一样吗?关于这些问题,有许多有趣的猜想和理论。现在我们将讲述一个可能解释这些问题的故事。根据故事中的信息,你需要用计算机解决一个有趣的问题。请注意,关于日历系统的理论有很多,本题仅以简化的方式讲述其中一种。

历史上,人们通过观察地球、月亮和太阳的相对位置来记录时间。一天是地球自转一周的时间。一年被定义为地球绕太阳公转的时间。地球绕太阳公转大约需要365.242190365.242190天,且存在微小变化。出于实际需要,日历年份必须包含整数天。因此,人们需要通过添加闰日来使日历与太阳同步。如果你将日历年份固定为365天,大约每4年需要添加一个闰日。然而,这种日历仍无法与地球公转位置完全同步,因为其平均每年为365.25365.25天,略多于实际周期。

根据测量地球公转周期的精度不同,人们需要设计不同的闰年规则。西方曾发明过多种著名的日历系统,更不用说更复杂的东方系统。为了简化问题,我们在此不讨论中国等东方日历系统,而专注于西方主要日历系统。最早的可能是儒略·凯撒于公元前46年创立的儒略历。它的精度不足,每128年会偏差一天。接下来是16世纪约瑟夫·尤斯图斯·斯卡利格发明的天文儒略历。两者都有简单的闰年判定规则。

下一个主要系统是格里高利历,于1582年发明,因为人们终于注意到日历与地球公转的同步问题。在此系统中,每100年会跳过闰年,除非是400的倍数。通过这一调整,日历年的平均天数为365.2425365.2425天。注意,该系统仍不完美,每3289年会多出一天。还有其他改进建议,如天文学家约翰·赫歇尔、希腊东正教和美国海军SPAWAR小组的方案。但为简化,人们通常使用格里高利历。

以下是格里高利历的闰年判定规则:

  • 对于年份yyy>1582y > 1582y1700y \neq 1700,当且仅当:
    • yy能被4整除,且
    • yy不能被100整除,除非能被400整除。
  • 对于年份yy0<y<15820 < y < 1582,当且仅当yy能被4整除时是闰年。
    因此,公元4年是闰年,100年是闰年,1900年不是闰年,但2000年是闰年。闰年有366天(多出的为2月29日),平年有365天。

在计算时,还需注意以下格里高利历的事实:历史上西方不同地区同时使用多种日历系统。现行的西方日历系统(主要遵循格里高利历,称为格里高利改革)于1752年9月3日被英国及其属地采用。出于某些原因(此处不赘述),从1752年9月3日起跳过了11天,即格里高利历中1752年9月3日至13日之间的日期不存在。罗马于1582年采用格里高利历。此外,由于历史原因,1700年被格里高利历视为闰年。格里高利历还有其他变体,但本题采用上述定义。

一个朔望月定义为连续新月或满月的平均间隔时间,即29.53129.531天。人们观察到每年平均有12.36812.368次满月。由于天数仍非整数,若将一年设为12个月、每月30天,则需每年额外添加几天。为避免麻烦,另一种方法是让每月的天数在30和31之间交替,但这会多出一天。经过多次调整,格里高利历将平年每月的天数依次设为31、28、31、30、31、30、31、31、30、31、30、31天。闰年时二月多一天。各月名称(从一月到十二月依次为January、February、March、April、May、June、July、August、September、October、November、December)也有许多有趣的故事。例如,罗马元老院将七月命名为July以纪念改革日历的儒略·凯撒。

古代一周的天数可能为4到10天不等。在格里高利历中,一周大致对应月亮的四分相位(易于观察),且因宗教等原因定为7天。七天名称(Sunday、Monday、Tuesday、Wednesday、Thursday、Friday、Saturday)也有许多故事。

在T岛,人们相信星辰位置能决定命运。当地人的工作日为周一至周五,周末(周六和周日)为固定假日,无其他假期。根据古老传说:

  • 若某月最后一个工作日是周五,则该月为幸运月。例如2006年9月的最后一个工作日是9月29日(周五),因此是幸运月;2006年7月的最后一个工作日是7月31日(周一),不是幸运月;2006年8月的最后一个工作日是8月31日(周四),也不是幸运月。据说在幸运月每天只吃素会带来财运。
  • 若某月第一个工作日是周一,则该月为吉祥月。例如2006年7月的第一个工作日是7月3日(周一),是吉祥月;2006年10月的第一个工作日是10月2日(周一),也是吉祥月;2006年8月的第一个工作日是8月1日(周二),不是吉祥月;2006年9月的第一个工作日是9月1日(周五),也不是吉祥月。据说在吉祥月每晚10点前睡觉会非常健康。一个月可以同时是幸运月和吉祥月。

给定一段时间,你的任务是使用上述格里高利历系统,统计该时间段内幸运月和吉祥月的数量。

输入格式

第一行包含测试用例数ww1w101 \leq w \leq 10)。随后每个测试用例占一行,包含四个数字:
Ys Ms Ye MeY_s\ M_s\ Y_e\ M_e
其中YsY_s0<Ys<100000 < Y_s < 10000)为起始年份,MsM_s1Ms121 \leq M_s \leq 12)为起始月份,YeY_e0<Ye<100000 < Y_e < 10000)为结束年份,MeM_e1Me121 \leq M_e \leq 12)为结束月份。
注意:保证起始月份不晚于结束月份。

输出格式

对每个测试用例,输出从YsY_sMsM_s月(含)到YeY_eMeM_e月(含)之间的幸运月数量和吉祥月数量,两数之间用空格分隔。

示例输入

2  
2006 9 2006 9  
2006 7 2006 9  

示例输出

1 0  
1 1  

来源
Kaohsiung 2006