F. Git Gud
F. Git Gud
时间限制:每测试点2秒
内存限制:每测试点256 MB
问题描述
lianhua - CITRUS!
⠀
您是为未来公司RoboCorp工作的冒险者。您当前的技能等级是范围 [1,n] 内的一个整数 s,但您不知道它的确切值。您的目标是通过完成RoboCorp的任务达到技能等级 \geq n,但每个任务都需要花费珍贵的robocoins。
您可以选择任意难度和任意正整持续时间(以小时计)的任务。然而,成本取决于新任务的长度,以及新任务的难度与您最近一个任务的难度比较。
设 x 是您最近一个任务的难度。如果您想要承担一个难度为 y、持续时间为 l 的新任务:
- 如果这是您的第一个任务,或者 y \leq x,成本为 l robocoins
- 如果 y > x,成本为 1000 + l robocoins
您的技能只有在承担难度恰好等于您当前技能等级的任务时才会提高:
- 如果 y = s,那么您的技能增加 l
- 否则,您的技能不会改变
每次任务后,您仍然不知道自己的实际技能值。
您从 10^6 robocoins开始。找到一个策略(一系列任务),不超过您的预算,并保证无论您的初始技能是什么,您的技能最终都至少达到 n。
输入格式
输入包含一行,有一个整数 n (n=4 或 n=250000) — 目标技能等级(即最终时,您的技能必须 \geq n)。
这个问题中恰好有 2 个测试(包括样例)。样例中 n=4,另一个测试中 n=250000。
此问题不允许hacks。
输出格式
在第一行,打印一个整数 k (0 \leq k \leq 10^6) — 您计划完成的任务数量。
然后,打印 k 行。第 i 行必须包含两个整数 y 和 l (1 \leq y,l \leq 10^6) — 分别表示第 i 个任务的难度和持续时间(以小时计)。
样例输入
4
样例输出
4
1 4
3 1
2 1
3 1
样例说明
在样例中,您的目标技能是 n=4。您可以使用以下策略:
- 承担难度 y=1、持续时间 l=4 的任务。这是您的第一个任务,所以您支付 l=4 robocoins
- 承担难度 y=3、持续时间 l=1 的任务。前一个任务的难度是 x=1,因为 y>x,您支付 l+1000=1001 robocoins
- 承担难度 y=2、持续时间 l=1 的任务。现在 x=3,因为 y \leq x,您支付 l=1 robocoin
- 承担难度 y=3、持续时间 l=1 的任务。现在 x=2,因为 y>x,您支付 l+1000=1001 robocoins
总共,您花费了 2007 robocoins,这在您的 10^6 robocoin预算内。
现在我们验证这个策略总是有效的:
- 如果您的初始技能是 1,在第一个任务后变为 5
- 如果您的初始技能是 2,在第三个任务后变为 3,在第四个任务后变为 4
- 如果您的初始技能是 3,在第二个任务后变为 4
- 如果您的初始技能是 4,保持为 4
所以无论您的起始技能是什么,您最终都会达到技能 \geq n。
💡 核心直觉 (一句话总结)
<% tp.file.cursor(2) %>
🚫 我的误区 (Fail Log)
- 思路错误:
- 实现错误:
- 数据范围:
✅ 正解思路
🧠 举一反三 (Pattern)
- 下次看到 "..." -> 想到 ...
💻 代码
```cpp
````