AT_arc101_d

AT_arc101_d

题目描述

在数轴上有 \(N\) 个机器人和 \(M\) 个出口。这 \(N+M\) 个坐标都是整数且互不相同。对于每个 \(i\)(\(1 \leq i \leq N\)),从左到右第 \(i\) 个机器人的坐标为 \(x_i\)。对于每个 \(j\)(\(1 \leq j \leq M\)),从左到右第 \(j\) 个出口的坐标为 \(y_j\)。

可以执行任意次以下操作,使所有机器人同时移动:

  • 使数轴上所有机器人的坐标都减 \(1\)。
  • 使数轴上所有机器人的坐标都加 \(1\)。

每当某个机器人与某个出口重合时,该机器人就会通过该出口并从数轴上消失。

所有机器人消失后,每个机器人通过哪个出口的组合有多少种可能?请输出对 \(10^9+7\) 取模的结果。

做法:

对于每个机器人,求出其与左边最近出口的距离 \(x_i\) ,与右边最近出口的距离 \(y_i\) 。

每次可以删掉 \(x_i\) 最小的机器人或 \(y_i\) 最小的机器人。

以下是一种非常直观的办法:

考虑将所有机器人移动的路线画出来。

设目前位置是 \(p\) ,原来位置是 \(q\) 。

横着走一步表示 \(q-p\) 增加一。

竖着走一步表示 \(p-q\) 增加一。

那么当直线的 \(x\) 达到 \(x_i\) 或 \(y\) 达到了 \(y_i\) 后,机器人 \(i\) 就会被删除。

如图的绿色线段指向的位置就是机器人被删除的时间(可能有一些不准确的地方,可以将机器人的坐标平移 \(0.5\) 来修正)。

这样子,红色线段底下的点就都往右走,上方的点就都往左走。

可以将序列划分为两部分。

我们只需要知道怎么划分即可。

简单 \(DP\) 一下并用树状数组优化得到答案。

\(O(n\log n)\) 。

posted @ 2026-10-21 21:37  wlhao  阅读(7)  评论(0)    收藏  举报