题意:一个数轴上有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