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)\) 。

浙公网安备 33010602011771号