数轴(0 ~ m)上有n个不同点,最多只能移动一个点,移动到[1, m]中任意一点,求最终最小相邻两个点的距离的最大值是什么
题目
思路:先找到相邻距离最小的位置,假设为pos, 那么不是移动第pos个点就是移动第(pos - 1)个点,先移动pos点,用数组vec存除了pos点之外的所有点,求出最小相邻距离和最大相邻距离,那么肯定将pos点插入到最大相邻距离中。
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
const int maxn = 1e6 + 5, inf = 1e9 + 5, maxm = 5e3 + 5, mod = 998244353;
int a[maxn];
int n, m;
string s;
int d[maxn];int calc(vector<int> vec){int mn = inf, mx = 0;for(int i = 1; i < n; i++){mn = min(mn, vec[i] - vec[i - 1] - 1);mx = max(mx, vec[i] - vec[i - 1] - 1);}return min(mn, max((mx - 1) / 2, m - vec[n - 1] - 1));
}void solve()
{cin >> n >> m;a[0] = 0;int mn = inf, mx = 0;int pos;for(int i = 1; i <= n;