【数学,方差运用,暴力求解】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...

附代码:

 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 = 500005;
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 = 0; i < n; i++)
19             scanf("%I64d", &a[i]);
20         sort(a, a+n);
21         ll sum1, sum2; sum1 = sum2 = 0;
22         double cen, ans;
23         if(n == k)
24         {
25             for(int i = 0; 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-2*cen*sum2;
32             printf("%.10lf\n", ans);
33             //cout << ans << endl;
34             continue ;
35         }
36         for(int i = 0; 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-2*cen*sum2;
43         int pos = 0;
44         double min_ = ans;
45         for(int i = 0; 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-2*cen*sum2;
51             min_ = min(min_, ans);
52         }
53         printf("%.10lf\n", min_);
54     }
55     return 0;
56 }

hdu 5037

时间: 2024-10-09 10:24:34

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

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

题目链接:HDU 5073 Galaxy 题意:在一维的坐标系里,给出N个点坐标,转动K个点,使转动后这个星系的的惯性最小(根据题意惯性最小也就是 求所有星星到星系中心的距离最小,这个可以理解成方差最小).求最小的惯性. 思路: 先对序列排序,再求出算N-K个点惯性的递推式. 以三个为例: 预处理是 平均数和各项的平方和, 注意:n==k的特判 AC代码: #include <stdio.h> #include <algorithm> using namespace std; do

hdu 5074 DP 2014鞍山现场赛题

hdu 5074 http://acm.hdu.edu.cn/showproblem.php?pid=5074 挺水的DP,注意依a[i-1]和a[i]的正负区分状态转移,然后O(n^3)即可轻易解决,我DP挺弱的也能过,貌似也就CF C题水平 //#pragma comment(linker, "/STACK:102400000,102400000") #include <cstdio> #include <cstring> #include <algo

hdu 5073 Galaxy(2014 鞍山现场赛)

Galaxy                                                                   Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 577    Accepted Submission(s): 132 Special Judge Problem Description G

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

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 解题报告:一个管理聊天窗口的程序,一共有八种操作,然后要注意的就是Top操作只是把编号为u的窗口标记为一种特殊的状态,在这种特殊的状态下优先级是最高的,聊天都是跟这个聊,而这个窗口并没有在实际上被提到最前面.还有就是每句后面都有句号.我本来可以1A的,但就是因为没看这个,所以一直WA也找不到原因. 暴力模拟就可以了,因为点最多只有5000个,不会超时,维护一个队列就可以了,但我为了方便判断是不

hdu 5078 2014鞍山现场赛 水题

http://acm.hdu.edu.cn/showproblem.php?pid=5078 现场最水的一道题 连排序都不用,因为说了ti<ti+1 //#pragma comment(linker, "/STACK:102400000,102400000") #include <cstdio> #include <cstring> #include <algorithm> #include <string> #include &l

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

http://acm.hdu.edu.cn/showproblem.php?pid=5071 Chat Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 702    Accepted Submission(s): 163 Problem Description As everyone knows, DRD has no girlfr

hdu 5073 2014鞍山现场赛题 物理题

http://acm.hdu.edu.cn/showproblem.php?pid=5073 推公式即可,质心公式segma(xi*wi)/segma(wi) 最终剩下的一定是连续n-k个星 然后枚举左边需要移除几个星即可 计算I的时候展开来算 比较坑的地方在于,星星的位置如果是int型,一定记得Double计算的时候 *1.0或者直接将位置数组声明为double  否则WA到死... //#pragma comment(linker, "/STACK:102400000,102400000&q

hdu 5078(2014鞍山现场赛 I题)

数据 表示每次到达某个位置的坐标和时间 计算出每对相邻点之间转移的速度(两点间距离距离/相隔时间) 输出最大值 Sample Input252 1 9//t x y3 7 25 9 06 6 37 6 01011 35 6723 2 2929 58 2230 67 6936 56 9362 42 1167 73 2968 19 2172 37 8482 24 98 Sample Output9.219544457354.5893762558 1 # include <iostream> 2 #

hdu 5074 Hatsune Miku(2014 鞍山现场赛)

Hatsune Miku Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 17    Accepted Submission(s): 14 Problem Description Hatsune Miku is a popular virtual singer. It is very popular in both Japan an