3 3 1 2 3 3 1 2 4 4 1 9 100 10
1.000 2.000 8.000HintFor the first sample , a legal answer is [1,2] [2,3] so the length is 1. For the second sample , a legal answer is [-1,1] [2,4] so the answer is 2. For the thired sample , a legal answer is [-7,1] , [1,9] , [10,18] , [100,108] so the answer is 8.
我的原先想法是二分所有整数解
后来发现有可能是半整数
5
1 2 5 6 8
所以改成了验证所有小数,仍错
发现是因为没有考虑到1条segment同时覆盖2点的情况
仍WA,
发现答案一定是某段区间的长度(或一半)否则必定可以继续拉长线段
加入优化,过。可能原先的Tle显示成wa或者溢出?了
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<functional>
#include<iostream>
#include<cmath>
#include<cctype>
#include<ctime>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Lson (x<<1)
#define Rson ((x<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,127,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define INF (2139062143)
#define F (100000007)
#define MAXN (50+100)
#define eps (1e-6)
#define MAXLen (2000000000+10)
long long mul(long long a,long long b){return (a*b)%F;}
long long add(long long a,long long b){return (a+b)%F;}
long long sub(long long a,long long b){return (a-b+(a-b)/F*F+F)%F;}
typedef long long ll;
int t,n,a[MAXN];
bool check(double x)
{
double t=a[1];
Fork(i,2,n-1)
{
if (t==(double)a[i]) continue;
else if (t<=(double)a[i]-x) t=(double)a[i];
else if ((double)a[i]+x<=(double)a[i+1]) t=(double)a[i]+x;
else return 0;
}
return 1;
}
int main()
{
cin>>t;
while(t--)
{
cin>>n;
For(i,n) scanf("%d",&a[i]);
sort(a+1,a+1+n);
double l=0,r=0,ans=0;
Fork(i,2,n)
{
if (check((double)a[i]-a[i-1])) ans=max(ans,(double)a[i]-a[i-1]);
else if (check(((double)a[i]-a[i-1])/2)) ans=max(ans,((double)a[i]-a[i-1])/2);
}
printf("%.3lf\n",ans);
}
return 0;
}
BestCoder Round #4(Miaomiao's Geometry-贪心),布布扣,bubuko.com
BestCoder Round #4(Miaomiao's Geometry-贪心)
原文:http://blog.csdn.net/nike0good/article/details/38688741