您的位置:首页 > 其它

HDU 4355 三分

2015-08-01 17:43 363 查看
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cstdio>
using namespace std;
const int maxn = 50100;
const double eps = 1e-5;
int n;
double data[maxn][2];

double cal(double x)
{
double ans = 0;
for(int i = 0;i < n;i ++)
{
double k = fabs(data[i][0]-x);
ans += k*k*k*data[i][1];
}
return ans;
}
double tsearch(double l,double r)
{
double mid,midmid,d1,d2;
while(r-l >= eps)
{
mid = (l+r)/2;
midmid = (mid+r)/2;
d1 = cal(mid);
d2 = cal(midmid);
if(d1 <= d2)
r = midmid;
else
l = mid;
}
return l;
}
int main()
{
int t,cas = 1;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
double l = 1000000,r = -1000000;
for(int i = 0;i < n;i ++)
{
scanf("%lf%lf",&data[i][0],&data[i][1]);
if(data[i][0] < l) l = data[i][0];
if(data[i][0] > r) r = data[i][0];
}
printf("Case #%d: %.0lf\n",cas,cal(tsearch(l,r)));
cas ++;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: