hdu 5073 Galaxy 数学 铜牌题
Good news for us: to release the financial pressure, the government started selling galaxies and we can
buy them from now on! The first one who bought a galaxy was Tianming Yun and he gave it to Xin
Cheng as a present.
To be fashionable, DRD also bought himself a galaxy. He named it Rho Galaxy. There are n stars
in Rho Galaxy, and they have the same weight, namely one unit weight, and a negligible volume. They
initially lie in a line rotating around their center of mass.
Everything runs well except one thing. DRD thinks that the galaxy rotates too slow. As we know,
to increase the angular speed with the same angular momentum, we have to decrease the moment of
inertia.
The moment of inertia I of a set of n stars can be calculated with the formula
I =
∑n
i=1
wi
· d
i
,
where wi
is the weight of star i, di
is the distance form star i to the mass of center.
As DRD’s friend, ATM, who bought M78 Galaxy, wants to help him. ATM creates some black holes
and white holes so that he can transport stars in a negligible time. After transportation, the n stars
will also rotate around their new center of mass. Due to financial pressure, ATM can only transport
at most k stars. Since volumes of the stars are negligible, two or more stars can be transported to the
same position.
Now, you are supposed to calculate the minimum moment of inertia after transportation.
Input
The first line contains an integer T (T ≤ 10), denoting the number of the test cases.
For each test case, the first line contains two integers, n (1 ≤ n ≤ 50000) and k (0 ≤ k ≤ n),
as mentioned above. The next line contains n integers representing the positions of the stars. The
absolute values of positions will be no more than 50000.
Output
For each test case, output one real number in one line representing the minimum moment of inertia.
Your answer will be considered correct if and only if its absolute or relative error is less than 1e-9.
Sample Input
3 2
-1 0 1
4 2
-2 -1 1 2
Sample Output
0.5
题意:有n(n<=5e4)个质点位于一维直线上,现在你可以任意移动其中k个质点,且移动到任意位置,设移动后的中心为e,求最小的I=(x[1]-e)^2+(x[2]-e)^2+(x[3]-e)^2.....(x[n]-e)^2;
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <algorithm>
#include <set>
using namespace std;
typedef long long ll;
typedef unsigned long long Ull;
#define MM(a,b) memset(a,b,sizeof(a));
#define SC scanf
#define CT continue
const int inf = 0x3f3f3f3f;
const double pi=acos(-1);
const int mod=100000000; const int N=5*1e4+5; const double eps=1e-8;
int dcmp(double x)
{
if(fabs(x)<eps) return 0;
else return x>0?1:-1;
} double x[N],sum[N],sum2[N]; int main()
{
int cas,n,k;
SC("%d",&cas);
while(cas--)
{
SC("%d%d",&n,&k);
for(int i=1;i<=n;i++) SC("%lf",&x[i]);
sort(x+1,x+n+1);
double ans=-1;
int m=n-k;
if(m<=1) {printf("0\n");CT;}
for(int i=1;i<=n;i++) {
sum2[i]=sum2[i-1]+x[i]*x[i];
sum[i]=sum[i-1]+x[i];
}
for(int i=m;i<=n;i++){
double tmp=0,e=(sum[i]-sum[i-m])/m;
tmp+=m*e*e;
tmp-=2*e*(sum[i]-sum[i-m]);
tmp+=sum2[i]-sum2[i-m];
if(dcmp(ans+1)==0) ans=tmp;
else ans=min(ans,tmp);
}
printf("%.12f\n",ans);
}
return 0;
}
1.对于给出的式子可以发现拆开后,只要预处理出两个前缀和和求出中心e就可以了
2.关键是求出e:可以发现每次移动k个后,对于剩下的m=n-k个,要让这k个I值尽可能小,那么这k个最好是连续的,且移动的k个应放在原来m个的e处,方能保证I值尽可能小,m*e^2-2*e*(x[1]+x[2]+..x[m])+(x[1]^2+x[2]^2+...x[m]^2);可以发现
当e=(x[1]+x[2]...+x[m])/m才能取得最小值,这样可以在O(1)时间求出当前枚举的K的I值
3,。因为输入的x值并不是按顺序的,,,所以要先排序
hdu 5073 Galaxy 数学 铜牌题的更多相关文章
- HDU 5073 Galaxy (2014 Anshan D简单数学)
HDU 5073 Galaxy (2014 Anshan D简单数学) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5073 Description G ...
- hdu 5073 Galaxy(2014acm鞍山亚洲分部 C)
主题链接:http://acm.hdu.edu.cn/showproblem.php? pid=5073 Galaxy Time Limit: 2000/1000 MS (Java/Others) ...
- hdu 5073 Galaxy(2014acm鞍山亚洲分部 D)
主题链接:http://acm.hdu.edu.cn/showproblem.php? pid=5073 Galaxy Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 5073 Galaxy(Anshan 2014)(数学推导,贪婪)
Galaxy Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total S ...
- HDU 5073 Galaxy(2014鞍山赛区现场赛D题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5073 解题报告:在一条直线上有n颗星星,一开始这n颗星星绕着重心转,现在我们可以把其中的任意k颗星星移 ...
- HDU - 5073 Galaxy(数学)
题目 题意:n个点,运行移动k个点到任何位置,允许多个点在同一位置上.求移动k个点后,所有点到整体中心的距离的平方和最小. 分析:这题题目真的有点迷...一开始看不懂.得知最后是选取一个中心,于是看出 ...
- ACM学习历程—HDU 5073 Galaxy(数学)
Description Good news for us: to release the financial pressure, the government started selling gala ...
- HDU 5073 Galaxy (数学)
Galaxy Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Su ...
- HDU 5073 Galaxy 2014 Asia AnShan Regional Contest 规律题
推公式 #include <cstdio> #include <cmath> #include <iomanip> #include <iostream> ...
随机推荐
- 最新精仿Chinaz中国站长网整站源码带全部数据带采集功能
用范围: 站长网源码演示地址:php源码运行环境: phpChinaz站长网对于广大站长来说,是不会陌生的,现在几乎成为了每个站长都必须上的网站了.这次分享的是Chinaz站长网的源码,包含了chi ...
- gdb暂停或恢复程序的运行
ref : https://blog.csdn.net/seu_lyr/article/details/9050657 一 暂停程序的运行: (一)GDB的暂停方式:断点(BreakPoint). ...
- 如何理解归一化(Normalization)对于神经网络(深度学习)的帮助?
如何理解归一化(Normalization)对于神经网络(深度学习)的帮助? 作者:知乎用户链接:https://www.zhihu.com/question/326034346/answer/730 ...
- 怎样在页面关闭时发起HTTP请求
比如有需求是要让页面关闭时, 在数据库中记录用户的一些数据或log日志. 这时就需要在用户关闭页面时发起HTTP请求. 做法是对window.onunload设置事件监听函数, 在函数内发起AJAX请 ...
- MongoDB实战读书笔记(二):面向文档的数据
1 schema设计原则 1.1 关系型数据库的三大设计范式 第一范式(1NF)无重复的列 第二范式(2NF)属性完全依赖于主键 [ 消除部分子函数依赖 ] 第三范式(3NF)属性不依赖于其它非主属性 ...
- react开发vscode插件推荐
原文地址:https://github.com/xieqingtian/blog/issues/2 由于本人主要是做react开发,用的代码编辑器是传说中的宇宙第一前端神器vscode, 所以在这里记 ...
- SP338ROADS题解--最短路变式
题目链接 https://www.luogu.org/problemnew/show/SP338 分析 联想到不久前做过的一道题\(Full\) \(Tank\),感觉可以用优先队列做,于是写了\(d ...
- mpvue + 微信小程序 picker 实现自定义多级联动 超简洁
微信小程序官网只提供了省市区的三级联动,实际开发中更多的是自定义的多级联动: 依照微信小程序官网提供的自定义多级联动,需要使用到picker 的多列选择器,即设置 mode = multiSelect ...
- debian设置limits.conf
最近已经把自己的游戏框架主要功能完成得差不多了,决定将自己的开发环境从debian7升级到debian9,不然太多第三方依赖都跟不上了.debian10刚出来,MongoDB还没适配,所以暂不考虑. ...
- mORMot学习笔记3 数据集转Json
usesSynCommons, SynDB, SynOleDB; procedure TForm1.DataToJsonClick(Sender: TObject); var Conn: TOleDB ...