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;
}
浙公网安备 33010602011771号