#P15141. [SWERC 2025] Git Gud

[SWERC 2025] Git Gud

说明

你是一名冒险家,为未来主义公司 RoboCorp 工作。你的初始技能等级是一个在 [1,n][1, n] 范围内的整数,但你不知道其确切值。你的目标是通过为 RoboCorp 完成任务,使技能等级至少达到 nn,但每个任务都需要花费宝贵的机器人币。

你可以选择任意难度和任意正整数的持续时间(以小时计)的任务。然而,成本取决于新任务的长度,以及新任务的难度与你最近一次任务难度的比较。

xx 为你最近一次任务的难度。如果你想要承担一个难度为 yy、持续时间为 ll 的新任务:

  • 如果这是你的第一个任务,或者 yxy \le x,则成本为 ll 机器人币。
  • 如果 y>xy > x,则成本为 1000+l1000 + l 机器人币。

你的技能只有在承担的任务难度 yy 恰好等于你当前技能 ss 时才会提升:

  • 如果 y=sy = s,则你的技能增加 ll
  • 否则,你的技能不变。

每次任务后,你仍然不知道自己的实际技能值。

你初始拥有 10610^6 机器人币。请找到一个策略(一系列任务),保证不超过预算,并且无论你的初始技能是什么,都能使你的技能至少达到 nn

输入格式

输入包含一行一个整数 nn1n2500001 \le n \le 250000)—— 目标技能等级(即最终你的技能必须大于或等于 nn)。

输出格式

第一行输出一个整数 kk0k1060 \le k \le 10^6)—— 你计划完成的任务数量。

接下来输出 kk 行。第 ii 行必须包含两个整数 yyll1y,l1061 \le y, l \le 10^6)—— 分别表示第 ii 个任务的难度和持续时间(以小时计)。

4
4
1 4
3 1
2 1
3 1

提示

样例解释

在此样例中,你的目标技能是 n=4n = 4。你可以使用以下策略:

  • 承担一个难度 y=1y = 1、持续时间 l=4l = 4 的任务。这是你的第一个任务,因此支付 l=4l = 4 机器人币。
  • 承担一个难度 y=3y = 3、持续时间 l=1l = 1 的任务。前一个任务难度为 x=1x = 1,由于 y>xy > x,你支付 l+1000=1001l + 1000 = 1001 机器人币。
  • 承担一个难度 y=2y = 2、持续时间 l=1l = 1 的任务。现在 x=3x = 3,由于 yxy \le x,你支付 l=1l = 1 机器人币。
  • 承担一个难度 y=3y = 3、持续时间 l=1l = 1 的任务。现在 x=2x = 2,由于 y>xy > x,你支付 l+1000=1001l + 1000 = 1001 机器人币。

总共花费 20072007 机器人币,这在你的 10610^6 机器人币预算之内。

现在验证该策略总是有效的:

  • 如果你的初始技能是 11,第一个任务后变为 55
  • 如果你的初始技能是 22,第三个任务后变为 33,第四个任务后变为 44
  • 如果你的初始技能是 33,第二个任务后变为 44
  • 如果你的初始技能是 44,保持 44

因此,无论初始技能如何,你最终都能达到技能 n\ge n

翻译由 DeepSeek 完成