USACO 2024年2月月赛

S1

观察发现,所有靶子右上角必须斜率负数,右下角必须斜率正数,左端点没有要求。先判断斜率中负数和正数的数量是否都达到 \(n\),否则无解。

其次,如果现在有两条线和两个 \(x\) 相等的点,斜率较大的线配了 \(y\) 较小的点。交换这两个匹配,发现让两个与 \(y\) 轴的交点更靠近了。由此得出结论:对于 \(x\) 相等的两个点,\(y\) 越大,配的斜率也要越大。

因此,记一共有 \(neg\) 个斜率为负数的直线,则所有左端点中 \(y\) 值最小的 \(neg-n\) 个点配的是斜率负数的直线,剩下的左端点配的是斜率正数的直线。

斜率为正为负可以独立计算。我们只需要算出 斜率负数中与 \(y\) 轴最高的交点最低是多少 和 斜率正数中与 \(y\) 轴最低的交点最高是多少,两者做差即可。

因为两种情况是对称的,这里只写斜率正数的情况。

把斜率从大到小排序,从大到小遍历,对于每个斜率,暴力找到当前还没匹配好的、与它构成的截距最高的点,同时与它匹配。

这个贪心为什么正确?

反证法。假如有两个斜率 \(s_i>s_j\),交换了之后可以使两个截距的距离缩短。交换了之后,显然 \(s_i\) 的截距会变低,否则与我们的贪心法矛盾了。那 \(s_j\) 的截距应该低得更多。但是设 \(s_i\) 在贪心法中配对的是 \((x,y)\),则它的截距是 \(y-s_ix\),现在 \(s_j\) 的截距是 \(y-s_jx\),由于 \(s_i>s_j\),所以 \(s_j\) 的截距反而变高了,矛盾。贪心法正确。

正确是正确,但是每次暴力找点,一共找 \(n\) 次,复杂度 \(O(n^2)\) 会爆掉。

观察问题:“最低的最高是多少”,这就是二分的经典语句。于是考虑二分这个最高的值 \(y\),于是可以通过 \(b=y-s_ix\le y_{max}\) 求出每个点的 \(s_i\) 应该 \(\ge\) 某个数,然后再排个序看下是否能满足每个 \(s_i\)\(\ge\) 条件即可。

S2

把一个颜色段看作一个球。现在有三个栈。初始 \(1,2\) 有球,\(3\) 空。

依次判断。

  1. 如果 \(1,2\) 中都只有一种颜色且 \(3\) 空,结束。

  2. \(1,2\) 的栈顶元素不一样且 \(3\) 为空时,把 \(1,2\) 中球数量多的那个栈的栈顶放到 \(3\) 里。

  3. 否则先判断是否三个栈都非空,若是:

    1. \(1,2\) 的栈顶相同,球较多的 pop 栈顶。

    2. \(1,3\)\(2,3\) 的栈顶相同,不妨 \(1,3\) 的栈顶相同。记这个栈顶球颜色为 \(clr\)。若 \(1\) 只剩这一个球且 \(clr\) 仅剩 \(1,3\) 这两个球,则 \(3\) 弹栈;否则 \(1\) 弹栈。

  4. 若不是:

    1. \(3\) 为空,则此时 \(1,2\) 的栈顶相同,令 \(1,2\) 中较多的弹栈。

    2. 否则不妨 \(1\) 空。判断:

      1. \(2,3\) 都仅剩一个球,令 \(3\) 的栈顶进入 \(1\)

      2. \(2,3\) 栈顶相同,令 \(3\) 弹栈。

      3. 否则,令 \(2\) 的栈顶进入 \(1\)

S3

以下一切都在 Bessie 采用了最佳策略,即 Elsie 的最差情况下考虑。

\(chg[i][0]\) 表示第 \(i\) 轮猜偶数的最大收益(可能为负数),\(chg[i][1]\) 表示第 \(i\) 轮猜奇数的最大收益。

\(i\leftarrow 1\sim m\),每次执行如下操作:

  1. 如果选 Even,之后还能构造出一种可行方案,选 Even,并更新当前血量;

  2. 如果选 Odd,之后还能构造出一种可行方案,选 Odd,并更新当前血量;

  3. 否则,无解。

现在的问题就是怎么判断之后是否有可行方案。记当前血量是 \(now\),“之后存在一种可行方案” 等价于 “如果之后 Elsie 都采取最优方案,不会血量归零”。

Elsie 的最优方案是什么?即每一个回合若 \(chg[i][0]>chg[i][1]\),则猜 \(0\);否则猜 \(1\)

考虑另外一个数组 \(mn[i]\)\(mn[i]=\displaystyle\min(0,\min_{j=i}^{m}\{\sum_{k=i}^j\max(chg[k][0],chg[k][1])\})\),即一个最小前缀。

显然这个数组是可以 \(O(m)\)\(m\)\(1\) 地递推的。

如果现在是第 \(i\) 轮,当前血量是 \(now\),则 “猜偶数之后存在可行方案” 等价于 “\(now+chg[i][0]+mn[i+1]>0\)”,猜奇数同理。

posted @ 2024-02-27 20:58  FLY_lai  阅读(7)  评论(0编辑  收藏  举报