话说这题读起来真费劲啊,估计很多人做不出来就是因为题读不懂......

从题目中提取的几点关键点:

题目背景就是银河系(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...

附代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cstring>
  5. #include<string>
  6. #include<algorithm>
  7. using namespace std;
  8. typedef long long ll;
  9. const int maxn = ;
  10. ll a[maxn];
  11.  
  12. int main()
  13. {
  14. int T; scanf("%d", &T);
  15. while(T--)
  16. {
  17. int n, k; scanf("%d%d", &n, &k);
  18. for(int i = ; i < n; i++)
  19. scanf("%I64d", &a[i]);
  20. sort(a, a+n);
  21. ll sum1, sum2; sum1 = sum2 = ;
  22. double cen, ans;
  23. if(n == k)
  24. {
  25. for(int i = ; i < n; i++)
  26. {
  27. sum1 += a[i]*a[i];
  28. sum2 += a[i];
  29. }
  30. cen = (double)sum2/n;
  31. ans = sum1+n*cen*cen-*cen*sum2;
  32. printf("%.10lf\n", ans);
  33. //cout << ans << endl;
  34. continue ;
  35. }
  36. for(int i = ; i < n-k; i++)
  37. {
  38. sum1 += a[i]*a[i];
  39. sum2 += a[i];
  40. }
  41. cen = 1.0*sum2/(n-k);
  42. ans = sum1+(n-k)*cen*cen-*cen*sum2;
  43. int pos = ;
  44. double min_ = ans;
  45. for(int i = ; i < k; i++)
  46. {
  47. sum1 = sum1-a[i]*a[i]+a[n-k+i]*a[n-k+i];
  48. sum2 = sum2-a[i]+a[n-k+i];
  49. cen = 1.0*sum2/(n-k);
  50. ans = sum1+(n-k)*cen*cen-*cen*sum2;
  51. min_ = min(min_, ans);
  52. }
  53. printf("%.10lf\n", min_);
  54. }
  55. return ;
  56. }

hdu 5037

【数学,方差运用,暴力求解】hdu-5037 Galaxy (2014鞍山现场)的更多相关文章

  1. HDU 5073 Galaxy(2014鞍山赛区现场赛D题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5073 解题报告:在一条直线上有n颗星星,一开始这n颗星星绕着重心转,现在我们可以把其中的任意k颗星星移 ...

  2. HDU 5073 Galaxy (2014 Anshan D简单数学)

    HDU 5073 Galaxy (2014 Anshan D简单数学) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5073 Description G ...

  3. 暴力求解——hdu 1799 循环多少次?

    Description   我们知道,在编程中,我们时常需要考虑到时间复杂度,特别是对于循环的部分.例如, 如果代码中出现 for(i=1;i<=n;i++) OP ; 那么做了n次OP运算,如 ...

  4. hdu 5073 Galaxy(2014 鞍山现场赛)

    Galaxy                                                                   Time Limit: 2000/1000 MS (J ...

  5. HDU 5073 Galaxy 2014 Asia AnShan Regional Contest 规律题

    推公式 #include <cstdio> #include <cmath> #include <iomanip> #include <iostream> ...

  6. HDU 5037 Frog(2014年北京网络赛 F 贪心)

    开始就觉得有思路,结果越敲越麻烦...  题意很简单,就是说一个青蛙从0点跳到m点,最多可以跳l的长度,原有石头n个(都仅表示一个点).但是可能跳不过去,所以你是上帝,可以随便在哪儿添加石头,你的策略 ...

  7. HDU 5071 Chat(2014鞍山赛区现场赛B题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 解题报告:一个管理聊天窗口的程序,一共有八种操作,然后要注意的就是Top操作只是把编号为u的窗口 ...

  8. hdu 5071(2014鞍山现场赛B题,大模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 思路:模拟题,没啥可说的,移动的时候需要注意top的变化. #include <iostr ...

  9. HDU 5071 Chat(2014鞍山B,模拟)

    http://acm.hdu.edu.cn/showproblem.php?pid=5071 Chat Time Limit: 2000/1000 MS (Java/Others)    Memory ...

随机推荐

  1. JDBC学习笔记(10)——调用函数&存储过程

    如何使用JDBC调用存储在数据库中的函数或存储过程: * 1.通过COnnection对象的prepareCall()方法创建一个CallableStatement *    对象的实例,在使用Con ...

  2. 应用反射写的tostring方法

    应用反射写的tostring方法 应用反射写的tostring方法,方便以后查询 代码 package com.chzhao.reflecttest; import java.lang.reflect ...

  3. STL学习系列三:Deque容器

    1.Deque简介 deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的. deque在接口上和vector非常 ...

  4. CodeForces 706D Vasiliy's Multiset (字典树查询+贪心)

    题意:最开始的时候有一个集合,集合里面只有一个元素0,现在有q次操作,操作分为3种: + x: 表示向集合中添加一个元素x - x:表示删除集合中值为x的一个元素 ? x:表示查询集合中与x异或的最大 ...

  5. jquery validation ajax 验证

    <link href="${base}/res/basic/css/jquery/validationEngine/validationEngine.jquery.css" ...

  6. IOC运用到MVC中

    IOC可以摒弃掉类中类的紧耦合,让设计和重用更简单,将IOC加入到MVC中的实现非常简单,那么有哪几种方法?它们的实现又是什么原理呢? IOC在MVC中的注入,主要是在获取Controller对象中实 ...

  7. 关于配置php源代码管理环境的几点注意

    1.如果你的项目原本就是utf-8的编码,而你设置eclipse的工作空间的默认编码为utf-8后,或者在项目文件夹上右键属性设置了编码类型后依旧没有效果,而是需要在每一个文件上右键属性设置为utf- ...

  8. Codeforces Round #334 (Div. 2) D. Moodular Arithmetic 环的个数

    D. Moodular Arithmetic Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/60 ...

  9. Qt一个project调用还有一个project的类成员变量

    一句两句话已经不能表达如今的激动情绪了.唯有感叹知识的博大精深,并把感叹转变为文字. 同一个project调用其它类成员变量很easy. 如: 定义 Test1.h中申明成员变量 class A { ...

  10. delphi HTML代码

    ################################属性 设置################################################字体设置{//-------- ...