#28. 耍杂技的牛

耍杂技的牛

农民约翰的 NN 头奶牛(编号为 1..N1..N)计划逃跑并加入马戏团,为此它们决定练习表演杂技。

奶牛们不是非常有创意,只提出了一个杂技表演:

叠罗汉,表演时,奶牛们站在彼此的身上,形成一个高高的垂直堆叠。

奶牛们正在试图找到自己在这个堆叠中应该所处的位置顺序。

NN 头奶牛中的每一头都有着自己的重量 WiW_i 以及自己的强壮程度 SiS_i

一头牛支撑不住的可能性取决于它头上所有牛的总重量(不包括它自己)减去它的身体强壮程度的值,现在称该数值为风险值,风险值越大,这只牛撑不住的可能性越高。

您的任务是确定奶牛的排序,使得所有奶牛的风险值中的最大值尽可能的小。

输入格式

第一行输入整数 NN,表示奶牛数量。

接下来 NN 行,每行输入两个整数,表示牛的重量和强壮程度,第 ii 行表示第 ii 头牛的重量 WiW_i 以及它的强壮程度 SiS_i

输出格式

输出一个整数,表示最大风险值的最小可能值。

数据范围

1N500001 \le N \le 50000,
1Wi10,0001 \le W_i \le 10,000,
1Si1,000,000,0001 \le S_i \le 1,000,000,000

输入样例:

3
10 3
2 5
3 3

输出样例:

2

已按 OJ 可直接用的 1.in/1.out ... 25.in/25.out 生成 25 组“叠罗汉最小化最大风险值”测试数据(覆盖:答案为负、排序陷阱、同 W+S 大量并列、强压力 N=50000 等)。

下载测试数据(zip)

下面说明 每组 k=1..25 分别在卡哪些常见错误做法(正确做法:按 W+S 升序排序,然后从上到下累加上方重量 sumW,每头牛风险 sumW - S,取最大值的最小可能值):

  1. 样例:基础正确性。
  2. N=1 且风险为负:正确输出 -S(这里 -100);卡把答案强行 max(0,…) 或认为风险不可能为负。
  3. N=2 顺序明显影响:卡不排序/错误排序方向(把重弱的放上面会导致更大最大风险)。
  4. W+S 全相等的并列:卡比较器 tie 处理、或用错误键排序(只按 W 或只按 S)。
  5. 输入本来就是 W+S 递增:卡公式实现(sumW 更新顺序、风险计算顺序)。
  6. #5 的逆序输入:卡没排序/把输入顺序当最终顺序。
  7. 超大 S(全部风险应很负):卡溢出/符号处理、以及不该输出 0。
  8. 很多小 S + 大 W(风险可能很大正数):卡用 32 位但中间计算/累加写错、或排序策略错导致最大风险偏大。
  9. 小随机综合:卡隐藏实现 bug。
  10. 专卡“按重量 W 排序”:该用例让按 W 排序会得到更差的最大风险。
  11. 专卡“按强壮 S 排序”:只按 S(或按 S 降序/升序)会错。
  12. 专卡“按 W-S 排序”:很多人误用别的贪心指标(如 W-S),此例会翻车。
  13. 极端大 S + 同和结构干扰:卡对 W+S 的正确使用,以及大数读入/比较。
  14. 大量 W+S 并列(60 个):卡 tie 情况下错误地以为顺序无关、或比较器不稳定导致实现细节错(虽然理论上 tie 任意,但一些错误实现会依赖其它字段导致出错)。
  15. W 递增、S 递减的“梯度”:卡风险计算的前后顺序(先算 risk 再加 w,别写反)。
  16. 大量 S=1(最小强壮):卡最大风险会很大正数;也卡用 int 溢出/符号。
  17. 大量 W=10000(最大重量):卡累加 sumW 的类型/溢出与性能。
  18. n=1000 随机大范围:卡 O(n^2) 的错误做法(如每次选位置枚举),以及总体正确性。
  19. 重弱很多 + 轻强很多(打乱):卡错误排序键(尤其只看 W 或只看 S),正确应明显分层。
  20. 阶梯式数据 + 额外小弱牛:卡扫描指针/更新逻辑(sumW 与 risk 的关系更复杂)。
  21. N=50000 压力:S 全部接近 1e9:强卡性能与 I/O;也卡认为风险非负的错误。
  22. N=50000 压力:全范围随机:综合强测(排序正确性 + 性能)。
  23. N=50000 压力:W 很大、S 很小:强卡最大风险为很大正数的情况;卡用 32 位/错误更新。
  24. N=50000 压力:极端交替(重弱 vs 轻强):强卡排序键必须是 W+S,否则最大风险会明显变差。
  25. N=50000:大量“中等强壮大重量” + 大量“极弱小重量”:卡对负/正风险混合时的最大值取法,以及排序/累加细节。

如果你希望我再补一套“专门卡某个错误实现”(比如:把风险算成 sumW+w-S、或从下往上算错方向、或用 W+S 降序),把那段错误思路告诉我,我可以再做更尖锐的小用例包。