题意:一个数轴上有n个点,现在要找一个点到所有点的距离Si的立方乘以点的权Wi的和最小
分析:三分。浮点数的二分或者三分可以直接用一个数字来限制查找的次数。TLE了几次,把查找次数从10000改到100就过了,本来以为数据范围比较大,100的精度不够。
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#define eps 1e-8
#define eps2 1e-5
#define INF 100000000000007
using namespace std;
int t,n;
double x[100005],w[100005];
double ans;
long long ans1;
double dis(double a,double b)
{
if(a>b){
double tmp=a;
a=b;
b=tmp;
}
return pow((b-a),3);
}
double ll(double a)
{
double sum=0;
for(int i=0;i<n;i++){
sum+=dis(a,x[i])*w[i];
}
return sum;
}
double find(double left,double right)
{
double l=left,r=right;
double ans1,ans2;
for(int i=0;i<100;i++){
double mid1=(l+r)/2.0;
double mid2=(mid1+r)/2.0;
ans1=ll(mid1);
ans2=ll(mid2);
if(ll(mid1)<ll(mid2)) r=mid2;
else l=mid1;
}
return ans1;
}
int main()
{
scanf("%d",&t);
for(int cas=1;cas<=t;cas++){
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%lf%lf",&x[i],&w[i]);
ans=find(x[0],x[n-1]);
ans1=(long long int)(ans+0.5);
printf("Case #%d: %I64d\n",cas,ans1);
}
}版权声明:本文为博主原创文章,未经博主允许不得转载。
HDU 4355 数轴上的点找使Si^3*Wi最小的和-浮点数三分
原文地址:http://blog.csdn.net/ac_0_summer/article/details/47188645