[R44A]2026
- 难度 入门
- 时限 1s
- 空限 256m
- 数学
对于 的数据,。
思路
题目给定 年 月 日是该年第一场挑战赛(即 年 月 日是周五),于是 年 月 日是 周四。
小 A 星球每年都是平年,固定 天,而 ,所以每过一年, 月 日的星期就向后顺移一天。于是 年 月 日的星期相对于 年的偏移量为 (用 ((x - 2026) % 7 + 7) % 7 把负数也归一到 )。
记这个相对偏移为 shift:当 shift = 0 时, 年 月 日和 年一样是周四,第一场落在 月 日;偏移越大,第一场相对 年越 靠前(向 月 日靠近)。所以:
若算出的 ,说明 月 日的星期在周四之后(周五到周六),第一个周五就在该月的更后面,需要加 把它拉回 月范围内。由于偏移最大为 , 最小为 ,加 后为 ,仍在 内,一定落在 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
}