[R44A]2026

  • 难度 入门
  • 时限 1s
  • 空限 256m
  • 数学

对于 100%100\% 的数据,1000≤x≤99991000 \le x \le 9999。

思路

题目给定 20262026 年 11 月 22 日是该年第一场挑战赛(即 20262026 年 11 月 22 日是周五),于是 20262026 年 11 月 11 日是 周四。

小 A 星球每年都是平年,固定 365365 天,而 365 mod 7=1365 \bmod 7 = 1,所以每过一年,11 月 11 日的星期就向后顺移一天。于是 xx 年 11 月 11 日的星期相对于 20262026 年的偏移量为 (x−2026) mod 7(x - 2026) \bmod 7(用 ((x - 2026) % 7 + 7) % 7 把负数也归一到 [0,6][0, 6])。

记这个相对偏移为 shift:当 shift = 0 时,xx 年 11 月 11 日和 20262026 年一样是周四,第一场落在 11 月 22 日;偏移越大,第一场相对 20262026 年越 靠前(向 11 月 11 日靠近)。所以:

d=2−shiftd = 2 - \text{shift}

若算出的 d≤0d \le 0,说明 11 月 11 日的星期在周四之后(周五到周六),第一个周五就在该月的更后面,需要加 77 把它拉回 11 月范围内。由于偏移最大为 66,dd 最小为 2−6=−42 - 6 = -4,加 77 后为 33,仍在 [1,7][1, 7] 内,一定落在 1 月,月份恒为 11。

复杂度

  • 时间复杂度:O(1)O(1)。
  • 空间复杂度:O(1)O(1)。

仓颉实现

查看仓颉实现
import std.convert.*
import std.env.*

main() {
    let reader = getStdIn()
    let x = Int64.parse(reader.readln().getOrThrow())
    let shift = ((x - 2026) % 7 + 7) % 7
    var day = 2 - shift
    if (day <= 0) {
        day += 7
    }
    println("1 ${day}")
}