Loading

CF618F Double Knapsack

Ad-hoc 题真不是很想写代码。

首先选子集根据经验一定是假的,不然 std 真依赖这个就成 SZY 最短路了。所以考虑强化限制成子段。

根据这种题型来说,值域 \([1, n]\) 是一个关键性质,它能能够保证一定有解

考虑最终选择第一个区间的 \((l1, r1]\),第二个区间的 \((l2, r2]\),那么设 \(a, b\) 的前缀和分别为 \(f, g\),则有:

\[f_{r1} - f_{l1} = g_{r2} - g_{l2} \]

那么变成两边:

\[f_{r1} - g_{r2} = f_{l1} - g_{l2} \]

根据敏锐的洞察力,我们猜测左右两边的东西值域都在 \([1, n]\),然后找到 \(n + 1\) 个位置鸽巢原理一下就做完了。

对于每个 \(i\),找到离 \(f_i\) 最近的 \(g_j\),我们声称如果此时不存在这样的 \(j\) 那么交换一下 \(f, g\) 必然存在,然后就做完了。

posted @ 2025-11-12 11:11  Alexande  阅读(4)  评论(0)    收藏  举报