HDU 4355-三分
2016-04-22 23:59
232 查看
http://acm.hdu.edu.cn/showproblem.php?pid=4355
题目 给n个人的位置 和 权值w
选 数轴上一实数点, 求每个人到该点的距离dis的三次方*w,的和
让这个和最小。
分析得,为单峰函数,三分解决
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <iostream>
//#include <time.h>
using namespace std;
const double pi=acos(-1.0);
double eps=0.000001;
struct node
{
double x,w;
node() {}
node( double a,double b)
{
x=a,w=b;
}
};
node aa[50005];
int n;
double F(double pos)
{
double ans=0;
for (int i=1; i<=n; i++)
{
double sb=fabs(aa[i].x-pos);
ans+=sb*sb*sb*aa[i].w;
}
return ans;
}
//double aaa[10005];
int main()
{
int t;
cin>>t;
// srand( (unsigned)time( NULL ) );
int cnt=1;
while(t--)
{
cin>>n;
double x,w;
int i;
/* for (i=1;i<=n;i++)
aaa[i]=rand()%1000*1.5;*/
//sort(aaa+1,aaa+1+n);
for (i=1; i<=n; i++)
{
scanf("%lf %lf",&aa[i].x,&aa[i].w);
// aa[i].x=aaa[i]*pow(-1.0,1.0*i);
// aa[i].w=rand()%15*1.0;
}
double l=-1e6;
double r=1e6;
for (i=0;i<100;i++)
{
double m1=l+(r-l)/3;
double m2=r-(r-l)/3;
if (F(m2)>F(m1))
r=m2;
else
l=m1;
}
printf("Case #%d: %.0lf\n",cnt++,F(l));
/*
double minn=F(1);
for (i=1;i<=n;i++)
{
minn= min(minn,F(i));
}
long long oo=(long long) (minn);
printf("ans2::%lld\n",oo);*/
}
return 0;
}
题目 给n个人的位置 和 权值w
选 数轴上一实数点, 求每个人到该点的距离dis的三次方*w,的和
让这个和最小。
分析得,为单峰函数,三分解决
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <iostream>
//#include <time.h>
using namespace std;
const double pi=acos(-1.0);
double eps=0.000001;
struct node
{
double x,w;
node() {}
node( double a,double b)
{
x=a,w=b;
}
};
node aa[50005];
int n;
double F(double pos)
{
double ans=0;
for (int i=1; i<=n; i++)
{
double sb=fabs(aa[i].x-pos);
ans+=sb*sb*sb*aa[i].w;
}
return ans;
}
//double aaa[10005];
int main()
{
int t;
cin>>t;
// srand( (unsigned)time( NULL ) );
int cnt=1;
while(t--)
{
cin>>n;
double x,w;
int i;
/* for (i=1;i<=n;i++)
aaa[i]=rand()%1000*1.5;*/
//sort(aaa+1,aaa+1+n);
for (i=1; i<=n; i++)
{
scanf("%lf %lf",&aa[i].x,&aa[i].w);
// aa[i].x=aaa[i]*pow(-1.0,1.0*i);
// aa[i].w=rand()%15*1.0;
}
double l=-1e6;
double r=1e6;
for (i=0;i<100;i++)
{
double m1=l+(r-l)/3;
double m2=r-(r-l)/3;
if (F(m2)>F(m1))
r=m2;
else
l=m1;
}
printf("Case #%d: %.0lf\n",cnt++,F(l));
/*
double minn=F(1);
for (i=1;i<=n;i++)
{
minn= min(minn,F(i));
}
long long oo=(long long) (minn);
printf("ans2::%lld\n",oo);*/
}
return 0;
}
相关文章推荐
- Win7系统蓝屏常用处理方法
- 高级动画-圆形树展开、收起动画
- 2--符号的技巧
- Jquery应用实例
- 20150204--JS巩固与加强2-02
- 操作系统 实验二 作业调度模拟程序
- firewall-cmd命令使用
- python爬虫开发–实战百度招聘(json包的处理)
- CodeForces 665C Simple Strings
- OBJ-C NSString类介绍及用法学习笔记
- PHP注销删除Session变量的通用方法
- 名字与地址转换函数笔记
- CodeForces 665B Shopping
- poj 3273 Monthly Expense
- 20150204--JS巩固与加强2-01
- Python2.7爬虫练习爬百度百科python词条
- OBJ-C对象的存储细节学习笔记
- 安装ntfs-3g挂载ntfs格式硬盘=centos7自学之三
- ava单例模式的正确写法
- HDU 5671 Matrix——BestCoder Round #81(div.1 div.2)