链接 HDU4932
【题意】在x轴上给出n个点,用一些等长的线段覆盖这些点,要求:
一:顶点必须在线段的左端点或者右端点,不可以在线段上。
二:线段之间不能相交,[1,2]和[2,3]不算相交。
【分析】比赛的时候没想全,答案除了可以是两点之间的距离外还可以是距离的一半,然后从大到小枚举线段长度判断是否可行即可。
【AC CODE】0ms
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
#define MAXN 60
typedef long long LL;
int n;
LL a[MAXN];
vector<LL> q;
bool ok(LL num)
{
LL r = a[0];
for(int i = 1; i < n-1; i++)
{
if(r+num <= a[i]) r = a[i];
else if(a[i]+num <= a[i+1])
{
r = a[i]+num;
if(a[i]+num == a[i+1]) i++;
}
else return false;
}
return true;
}
int main()
{
#ifdef SHY
freopen("e:\\1.txt", "r", stdin);
#endif
int t;
scanf("%d%*c", &t);
while(t--)
{
q.clear();
scanf("%d%*c", &n);
for(int i = 0; i < n; i++)
scanf("%I64d%*c", &a[i]), a[i] *= 10;
sort(a,a+n);
for(int i = 1; i < n; i++)
{
q.push_back(a[i]-a[i-1]);
q.push_back((a[i]-a[i-1])/2);
}
sort(q.begin(),q.end());
LL ans;
for(int i = q.size()-1; i >= 0; i--)
{
if(ok(q[i]))
{
ans = q[i];
break;
}
}
printf("%.3lf\n", ans/10.0);
}
return 0;
}