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> ...
随机推荐
- Python基础 第三章 使用字符串(3)字符串方法&本章小结
字符串的方法非常之多,重点学习一些最有用的,完整的字符串方法参见<Python基础教程(第三版)>附录B. 模块string,虽然风头已小,但其包含了一些字符串方法中没有的常量和函数,故将 ...
- spring——自动装配
语法:<bean id="..." class="..." autowire="byType"/> autowire属性取值如下 ...
- Unity 用脚本给EventTrigger添加各种事件
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Eve ...
- PHP如何通过URL访问,获得新的URL 两种方法
1.1 $url = 'http://passport.drcloud.cn/api/logon.asp?id=1&ru=http://203.158.158.122/store/thirdL ...
- CSP-S2019「Symphony」
NOTICE:如觉得本文有什么错误或不妥之处,欢迎评论区以及私信交流,反对乱喷,如有一些让人不爽的评论或人身攻击,带来的后果本人一律不负责 准备工作 Day-inf~Day-3 000 every d ...
- 【php设计模式】装饰器模式
装饰器模式,顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能.其结构图如下: Component为统一接口,也是装饰类和被装饰类的基本类型. ConcreteComponent为具体实现类 ...
- js面向对象的几种方式
对象的字面量 var obj={}:创建实例对象 var obj=new Object();构造函数模式 function fn(){}, new fn();工厂模式:用一个函数,通过传递参数返回对象 ...
- ONNX预训练模型加载
tvm官网中,对从ONNX预训练模型中加载模型的教程说明 教程来自于:https://docs.tvm.ai/tutorials/frontend/from_onnx.html#sphx-glr-tu ...
- 用Leangoo做敏捷需求管理
转自:https://www.leangoo.com/9229.html 传统的瀑布工作模式使用详细的需求说明书来表达需求,需求人员负责做需求调研,根据调研情况编制详细的需求说明书,进行需求评审,评审 ...
- C和指针--编程题9.14第10小题--判断回文函数
题目: 编写函数 int palindrom( char *string); 如果参数字符串是个回文,函数就返回真,否则就返回假.回文就是指一个字符串从左向右读和从右向左读是一样的.函数应忽略所有的非 ...