Now give you every spirit's weight and location,find the best place to celebrate the harvest which make the sum of unhappyness of every spirit the least.
1 4 0.6 5 3.9 10 5.1 7 8.4 10
Case #1: 832
这道我刚开始是分成均等的三份进行三分,结果超时,然后试了试二分中的二分的三分,过了。看来还是这个快啊,下面是正确代码!!!!
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const double eps=1e-12;
int t;
/*struct Node
{
double x;
double w;
}nde[50010];*/
double a[405];
double cal(double xx)
{
double res=0;
for(int i=0;i<=t;i++)
{
double d=xx-a[i];
if(d<0)
d=d*(-1);
res+=d;
}
return res;
}
int main()
{
while(scanf("%d",&t)!=-1)
{
for(int i=1;i<=t;i++)
scanf("%lf",&a[i]);
double mid,midd;
double l=a[1];
double r=a[t];
while(r-l>eps)
{
mid=(r+l)/2;
midd=(r+mid)/2;
if(cal(mid)<cal(midd))
r=midd;
else
l=mid;
}
double g=cal(l);
double h=cal(r);
if(g<h)
printf("%.10f\n",g);
else
printf("%.10f\n",h);
}
return 0;
}