注意: s 是每个机器人运动的方向,相遇即转头且机器人无区分 等效于 错身 继续往前。
class Solution:
def sumDistance(self, nums: List[int], s: str, d: int) -> int:
# 相撞后直接 掉头,而机器人之间无区分,等效于 机器人 错身 继续往前了。
# 需要 增减的数
n = len(nums)
pos = [nums[i] - d if s[i] == 'L' else nums[i] + d for i in range(n)]
pos.sort() # 方便后续求和
return sum([(pos[i] - pos[i - 1]) * i * (n - i) for i in range(1, n)]) % (10**9 + 7)
class Solution {
public:
static constexpr int mod = 1e9 + 7;
int sumDistance(vector<int>& nums, string s, int d) {
int n = nums.size();
vector<long long> pos(n);
for (int i = 0; i < n; ++i){
if (s[i] == 'L'){
pos[i] = (long long) nums[i] - d;
}else{
pos[i] = (long long) nums[i] + d;
}
}
sort(pos.begin(), pos.end());
long long res = 0;
for (int i = 1; i < n; ++i){
res += 1ll * (pos[i] - pos[i - 1]) * i % mod * (n - i) % mod; // 三重 求模
res %= mod;
}
return res;
}
};