[R44A]2026

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

对于 100%100\% 的数据,1000x99991000 \le x \le 9999

思路

题目给定 202620261122 日是该年第一场挑战赛(即 202620261122 日是周五),于是 202620261111 日是 周四

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

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

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

若算出的 d0d \le 0,说明 1111 日的星期在周四之后(周五到周六),第一个周五就在该月的更后面,需要加 77 把它拉回 11 月范围内。由于偏移最大为 66dd 最小为 26=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(): Int64 {
    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}")
    return 0
}