考场经验:这种大模拟题,算法时间复杂度允许的情况下,暴力枚举/预处理比 O(1) 的式子更保险。
本题先预处理4713.1.1BC~1599.12.31AD,把儒略日和日期对应,储存下来方便直接使用。
记1599.12.31AD对应的儒略日为 $b$,$R=r-b-1$,这样1600.1.1即为0。
预处理一个400年内前 $i$ 年天数的总和 $s_i$、平年/闰年前 $i$ 个月的天数总和 $t_i$, $u_i$,用upper_bound找出 $R$ 对应的第几个400年,年,月。
注意:因为每年的1月1日对应数字0,一定要使用upper_bound!
血的教训:变量名不能用重,全局变量和main()中不能都有变量a!
十年OI一场空,1582敲成了1583,还不送去见那没脸见的祖宗!