官方题解
2026-03-30 15:48:56
发布于:浙江
19阅读
0回复
0点赞
题目大意
给定 个同学在数轴上的位置 ,每辆车最多载 人,且两人之间距离满足 才能拼车。求最少需要多少辆车使所有同学都能回家。
题解思路
要让车辆数最少,就要让“拼车的对数”尽量多,因为每拼成一对就比两人各自打车少用一辆车。
把所有位置 排序为 。在有序序列上从左到右扫描:
- 如果 ,就把这两位同学配成一对,然后跳过这两人;
- 否则 无法与任何更右侧的人拼车(更右只会更远),只能单独一辆车。
这是最大化不相交配对数的典型贪心:能配就立刻配相邻元素。设配对数为 pairs,答案为
复杂度:排序 ,扫描 。
参考代码
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
long long D;
cin >> n >> D;
vector<long long> x(n);
for (int i = 0; i < n; i++) cin >> x[i];
sort(x.begin(), x.end());
int pairs = 0;
int i = 0;
while (i + 1 < n) {
if (x[i + 1] - x[i] <= D) {
pairs++;
i += 2;
} else {
i += 1;
}
}
cout << (n - pairs) << "\n";
return 0;
}
这里空空如也








有帮助,赞一个