【贪心】HDU 4932 Miaomiao's Geometry
从大到小排序 两点的差和两点差的一半
看能否满足题目条件
#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; }