P2988题解

只有我用的暴力吗........

solution

发现最差情况为最多的 $0$ 和 $1$ 发生了错位,即为 $ \left | a_i - x \right | $。

因此题目转化为最大化 $ \left | a_i - x \right | $ 的最小值。

发现 $n \le 10^6 $,$k \le 10^4$,排序后 $O(n)$ 爆搜即可。

时间复杂度 $O(n+k\log k)$。

#include <bits/stdc++.h>
using namespace std;
int maxx=0;
int n,i,j,k,m,x;
int a[10005];
int main() {
    cin>>n>>m;
    for(i=1;i<=m;i++)
      scanf("%d",&a[i]);
    sort(a+1,a+m+1);
    a[m+1]=0x7fffffff;
    int now=0;
    for(i=0;i<=n;i++){
        maxx=max(maxx,min(i-a[now],a[now+1]-i));
        while(a[now+1]==i) now++;
    }
    printf("%d",maxx);

    return 0;
}
posted @ 2023-09-01 10:31  monster_hunterqwq  阅读(5)  评论(0编辑  收藏  举报  来源