P15141 [SWERC 2025] Git Gud
题目描述
你是一名冒险家,为未来主义公司 RoboCorp 工作。你的初始技能等级是一个在 $[1, n]$ 范围内的整数,但你不知道其确切值。你的目标是通过为 RoboCorp 完成任务,使技能等级至少达到 $n$,但每个任务都需要花费宝贵的机器人币。
你可以选择任意难度和任意正整数的持续时间(以小时计)的任务。然而,成本取决于新任务的长度,以及新任务的难度与你最近一次任务难度的比较。
设 $x$ 为你最近一次任务的难度。如果你想要承担一个难度为 $y$、持续时间为 $l$ 的新任务:
- 如果这是你的第一个任务,或者 $y \le x$,则成本为 $l$ 机器人币。
- 如果 $y > x$,则成本为 $1000 + l$ 机器人币。
你的技能只有在承担的任务难度 $y$ 恰好等于你当前技能 $s$ 时才会提升:
- 如果 $y = s$,则你的技能增加 $l$。
- 否则,你的技能不变。
每次任务后,你仍然不知道自己的实际技能值。
你初始拥有 $10^6$ 机器人币。请找到一个策略(一系列任务),保证不超过预算,并且无论你的初始技能是什么,都能使你的技能至少达到 $n$。
输入格式
输入包含一行一个整数 $n$($1 \le n \le 250000$)—— 目标技能等级(即最终你的技能必须大于或等于 $n$)。
输出格式
第一行输出一个整数 $k$($0 \le k \le 10^6$)—— 你计划完成的任务数量。
接下来输出 $k$ 行。第 $i$ 行必须包含两个整数 $y$ 和 $l$($1 \le y, l \le 10^6$)—— 分别表示第 $i$ 个任务的难度和持续时间(以小时计)。
说明/提示
#### 样例解释
在此样例中,你的目标技能是 $n = 4$。你可以使用以下策略:
- 承担一个难度 $y = 1$、持续时间 $l = 4$ 的任务。这是你的第一个任务,因此支付 $l = 4$ 机器人币。
- 承担一个难度 $y = 3$、持续时间 $l = 1$ 的任务。前一个任务难度为 $x = 1$,由于 $y > x$,你支付 $l + 1000 = 1001$ 机器人币。
- 承担一个难度 $y = 2$、持续时间 $l = 1$ 的任务。现在 $x = 3$,由于 $y \le x$,你支付 $l = 1$ 机器人币。
- 承担一个难度 $y = 3$、持续时间 $l = 1$ 的任务。现在 $x = 2$,由于 $y > x$,你支付 $l + 1000 = 1001$ 机器人币。
总共花费 $2007$ 机器人币,这在你的 $10^6$ 机器人币预算之内。
现在验证该策略总是有效的:
- 如果你的初始技能是 $1$,第一个任务后变为 $5$。
- 如果你的初始技能是 $2$,第三个任务后变为 $3$,第四个任务后变为 $4$。
- 如果你的初始技能是 $3$,第二个任务后变为 $4$。
- 如果你的初始技能是 $4$,保持 $4$。
因此,无论初始技能如何,你最终都能达到技能 $\ge n$。
翻译由 DeepSeek 完成