【数学,方差运用,暴力求解】hdu-5037 Galaxy (2014鞍山现场)
话说这题读起来真费劲啊,估计很多人做不出来就是因为题读不懂......
从题目中提取的几点关键点:
题目背景就是银河系(Rho Galaxy)中的星球都是绕着他们的质心(center of mass)转的(妈蛋就是这里啊,质心是个什么鬼...,其实就是所有点的值的算术平均值)。
现在你可以从一个银河系中的所有星球中转移其中的k个(具体这个转移的意思你可以理解成把他们移到剩下星球的质心上,这样对剩余的整体不会产生影响,当然这也等价于把这k个星球直接删了),然后使剩下的星球让这个The moment of inertia I值最小,计算公式是

其中wi是每个星球的重量,视为单位1,di是星球i到质心的距离(di-d0)。
这样看来I值就是(d1-d0)2 + (d2-d0)2 + ... + (dn-k-d0)2
这不就是标准差吗,当然标准差就是方差的平方,而方差越小表示分布越集中,也就是说,这些星球越连续,这个I值就会越小。
因此这里也用到了贪心的思想。
需要注意的一点是,当n=k时,可以直接输出0,因为这孩子把所有星球都弄到质心去了2333333...
附代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn = ;
ll a[maxn]; int main()
{
int T; scanf("%d", &T);
while(T--)
{
int n, k; scanf("%d%d", &n, &k);
for(int i = ; i < n; i++)
scanf("%I64d", &a[i]);
sort(a, a+n);
ll sum1, sum2; sum1 = sum2 = ;
double cen, ans;
if(n == k)
{
for(int i = ; i < n; i++)
{
sum1 += a[i]*a[i];
sum2 += a[i];
}
cen = (double)sum2/n;
ans = sum1+n*cen*cen-*cen*sum2;
printf("%.10lf\n", ans);
//cout << ans << endl;
continue ;
}
for(int i = ; i < n-k; i++)
{
sum1 += a[i]*a[i];
sum2 += a[i];
}
cen = 1.0*sum2/(n-k);
ans = sum1+(n-k)*cen*cen-*cen*sum2;
int pos = ;
double min_ = ans;
for(int i = ; i < k; i++)
{
sum1 = sum1-a[i]*a[i]+a[n-k+i]*a[n-k+i];
sum2 = sum2-a[i]+a[n-k+i];
cen = 1.0*sum2/(n-k);
ans = sum1+(n-k)*cen*cen-*cen*sum2;
min_ = min(min_, ans);
}
printf("%.10lf\n", min_);
}
return ;
}
hdu 5037
【数学,方差运用,暴力求解】hdu-5037 Galaxy (2014鞍山现场)的更多相关文章
- HDU 5073 Galaxy(2014鞍山赛区现场赛D题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5073 解题报告:在一条直线上有n颗星星,一开始这n颗星星绕着重心转,现在我们可以把其中的任意k颗星星移 ...
- HDU 5073 Galaxy (2014 Anshan D简单数学)
HDU 5073 Galaxy (2014 Anshan D简单数学) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5073 Description G ...
- 暴力求解——hdu 1799 循环多少次?
Description 我们知道,在编程中,我们时常需要考虑到时间复杂度,特别是对于循环的部分.例如, 如果代码中出现 for(i=1;i<=n;i++) OP ; 那么做了n次OP运算,如 ...
- hdu 5073 Galaxy(2014 鞍山现场赛)
Galaxy Time Limit: 2000/1000 MS (J ...
- HDU 5073 Galaxy 2014 Asia AnShan Regional Contest 规律题
推公式 #include <cstdio> #include <cmath> #include <iomanip> #include <iostream> ...
- HDU 5037 Frog(2014年北京网络赛 F 贪心)
开始就觉得有思路,结果越敲越麻烦... 题意很简单,就是说一个青蛙从0点跳到m点,最多可以跳l的长度,原有石头n个(都仅表示一个点).但是可能跳不过去,所以你是上帝,可以随便在哪儿添加石头,你的策略 ...
- HDU 5071 Chat(2014鞍山赛区现场赛B题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 解题报告:一个管理聊天窗口的程序,一共有八种操作,然后要注意的就是Top操作只是把编号为u的窗口 ...
- hdu 5071(2014鞍山现场赛B题,大模拟)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 思路:模拟题,没啥可说的,移动的时候需要注意top的变化. #include <iostr ...
- HDU 5071 Chat(2014鞍山B,模拟)
http://acm.hdu.edu.cn/showproblem.php?pid=5071 Chat Time Limit: 2000/1000 MS (Java/Others) Memory ...
随机推荐
- Java缓存学习之三:CDN缓存机制
CDN是什么? 关于CDN是什么,此前网友详细介绍过. CDN是Content Delivery Network的简称,即"内容分发网络"的意思.一般我们所说的CDN加速,一般是指 ...
- HDU 5531 Rebuild (2015长春现场赛,计算几何+三分法)
Rebuild Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total S ...
- Spring Data JPA Tutorial Part Nine: Conclusions(未翻译)
This is the ninth and the last part of my Spring Data JPA tutorial. Now it is time to take a look of ...
- rqnoj-396-SY学语文-dp
纯动态规划. 注意初始化为-INF #include<stdio.h> #include<algorithm> #include<iostream> #includ ...
- thttpd的定时器
运用了static函数实现文件封装 提升变量访问效率的关键字register,该关键字暗示该变量可能被频繁访问,如果可能,请将值存放在寄存器中 内存集中管理,每个节点在取消后并没有立即释放内存,而是调 ...
- 让div变得大方美观 bootstrap
<div class="panel panel-default "> <div class="panel-heading"> <h ...
- skyline TerraExplorer fly设置相对路径的方法
软件环境:TerraExplorer Pro(以下简称TEP)6.5 在TEP中,对于本地(非网络)文件路径,默认都是绝对路径,在移动数据时非常麻烦,以下是本人总结出一些设置相对路径的规则 假设fly ...
- Codeforces Round #185 (Div. 2) B. Archer 水题
B. Archer Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/312/problem/B D ...
- Jquery中$与$.fn的差别
当今web开发往往离不开Jquery的使用,Jquery以其简洁的使用方式.良好的浏览器兼容性赢得了软件研发同行的青睐,作为当中的一员,自然也不例外,虽然刚開始时非常排斥Jquery,今天我谈一下对J ...
- OpenGL 3:画圆
这次使用OpenGL画圆,而且中间画一个实心的五角星. 1. 画实心五角: 由于之前使用Polygen画会出现故障,或许是各个GPU硬件也会不一样的,所以使用Polygen画实心五角星并不可靠: 所以 ...