您的位置:首页 > 其它

【贪心】HDU 4932 Miaomiao's Geometry

2014-08-11 15:50 369 查看
从大到小排序 两点的差和两点差的一半

看能否满足题目条件

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
#include <queue>
#include <stack>
#include <vector>
#include <deque>
#include <set>
#include <map>
#define IN freopen ("in.txt" , "r" , stdin);
#define OUT freopen ("out.txt" , "w" , stdout);
typedef long long LL;
const int MAXN = 100999;//点数的最大值
const int MAXM = 1000010;//边数的最大值
const LL INF = 1152921504;
double a[55];
int n;
vector <double> v;
bool good(double x)
{
bool best=false;
for(int i=2;i<n;i++)
{
if((!best&&(a[i]-a[i-1])>=x)||(best&&(a[i]-a[i-1])/2>=x||a[i]-a[i-1]==x))
best=false;
else if(a[i+1]-a[i]>=x)
best=true;
else return 0;
}
return 1;
}
int main()
{
int t;
// IN
scanf("%d",&t);
while(t--)
{
v.clear();
scanf("%d",&n);
for(int i = 1; i <= n; i++)
scanf("%lf",&a[i]);
sort(a+1,a+n+1);
for(int i=1;i<n;i++)
{
v.push_back(a[i+1]-a[i]);
v.push_back((a[i+1]-a[i])/2);
}
sort(v.begin(),v.end());
for(int i=v.size()-1;i>=0;i--)
{
if(good(v[i]))
{
printf("%.3lf\n",v[i]);
break;
}
}
}
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: