鸽巢原理
桶排序
测试样例
5
2.3 3.1 7.5 1.5 6.3
3.2
测试代码
#include <bits/stdc++.h>
using namespace std;
struct bucket{
double p;///下限
double q;///上限
bool m;
bucket(double p,double q):p(p),q(q){
m = false;
}
};
int main(){
int n;
cin >> n;
vector<double> a(n);
double p = DBL_MAX;
double q = DBL_MIN;
for(int i=0;i<n;i++){
cin >> a[i];
p = min(p,a[i]);///求最小
q = max(q,a[i]);///求最大
}
vector<bucket> b(n-1,bucket(q,p));
for(int i=0;i<n;i++){
int j = (int)((n-1)*(a[i]-p)/(q-p));
if(j==n-1){
j--;
}
b[j].p = min(b[j].p,a[i]);
b[j].q = max(b[j].q,a[i]);
b[j].m = true;
}
double r = 0;
int i,j;
for(i=0;i<n-2;i=j){
for(j=i+1;!b[j].m;j++);
r = max(r,b[j].p-b[i].q);
}
cout << r << endl;
return 0;
}