HDU 5073 Galaxy(Anshan 2014)(数学推导,贪婪)
Galaxy
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 556 Accepted Submission(s): 127
Special Judge

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

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.
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.
2
3 2
-1 0 1
4 2
-2 -1 1 2
0
0.5
解题思路:选择保留区间长度为N - K的连续的数, 然后其余的K个数都移动到这N-K个数的中心。
那个式子事实上表示的是方差。选择的点越密集,方差越小,所以选择连续的N-K个。
其余的假设放到其它地方。肯定没有放到N-K的质心更优。
但这样每次枚举长度为N-K的区间。再计算对应的方差。复杂度为O(NK),会超时。所以通过数学推导变形,避免反复计算。详细例如以下:
第i个到第i+n-k-1个的
方差 = (Xi - X)^2 + (Xi+1 - X)^2 + ... + (Xi+n-k-1 - X)^2 (当中X表示Xi,Xi+1, ... , Xi+n-k-1的平均值)
= Xi^2 + Xi+1^2 + ... + Xi+n-k-1^2 - 2X(Xi + Xi+1 + ... Xi+n-k-1) (令sum2=Xi^2 + Xi+1^2 + ... + Xi+n-k-1^2,sum1=Xi+Xi+1+ ... +Xi+n-k-1)
= sum2 - sum1^2 / (n - k)
所以,排序后维护两种前缀,O(n)扫描。取方差的最小值就可以。
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std; const int MAXN = 50010;
const double INF = 1e20;
int n, k, nCase;
double p[MAXN], sum1[MAXN], sum2[MAXN], ans; void init() {
ans = INF;
sum1[0] = sum2[0] = 0.0;
} void input() {
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; i++) {
scanf("%lf", &p[i]);
}
} void solve() {
if (n == k) {
printf("%.10lf\n", 0);
return;
}
sort(p+1, p+n+1);
for (int i = 1; i <= n; i++) {
sum1[i] = sum1[i-1] + p[i];
sum2[i] = sum2[i-1] + p[i]*p[i];
}
for (int i = 1; i <= k+1; i++) {
double s1 = sum1[i+n-k-1] - sum1[i-1];
double s2 = sum2[i+n-k-1] - sum2[i-1];
double tmp = s2 - s1*s1 / (n-k);
if (tmp < ans) ans = tmp;
} printf("%.10lf\n", ans);
} int main() {
scanf("%d", &nCase);
while (nCase--) {
init();
input();
solve();
}
return 0;
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
HDU 5073 Galaxy(Anshan 2014)(数学推导,贪婪)的更多相关文章
- hdu 5073 Galaxy(2014 鞍山现场赛)
Galaxy Time Limit: 2000/1000 MS (J ...
- 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) ...
- 2014 Asia AnShan Regional Contest --- HDU 5073 Galaxy
Galaxy Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5073 Mean: 在一条数轴上,有n颗卫星,现在你可以改变k颗 ...
- HDU 5073 Galaxy 2014 Asia AnShan Regional Contest 规律题
推公式 #include <cstdio> #include <cmath> #include <iomanip> #include <iostream> ...
- HDU 5073 Galaxy(2014鞍山赛区现场赛D题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5073 解题报告:在一条直线上有n颗星星,一开始这n颗星星绕着重心转,现在我们可以把其中的任意k颗星星移 ...
- ACM学习历程—HDU 5073 Galaxy(数学)
Description Good news for us: to release the financial pressure, the government started selling gala ...
- hdu 5073 Galaxy 数学 铜牌题
0.5 题意:有n(n<=5e4)个质点位于一维直线上,现在你可以任意移动其中k个质点,且移动到任意位置,设移动后的中心为e,求最小的I=(x[1]-e)^2+(x[2]-e)^2+(x[3]- ...
随机推荐
- [PReact] Create a Hello World App with Preact
By creating a simple ‘hello world’ example application first in vanilla Javascript, and then in Prea ...
- 【48.47%】【POJ 2524】Ubiquitous Religions
Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 32364 Accepted: 15685 Description There a ...
- Android事件分发机制具体解释
转载注明出处:http://blog.csdn.net/xiaohanluo/article/details/52416141 1. 概述 Android日常研发时,与View接触占领相当多的时间.而 ...
- JMS是一种应用于异步消息传递的标准API
JMS是一种应用于异步消息传递的标准API,作为Java平台的一部分,JMS可以允许不同应用.不同模块之间实现可靠.异步数据通信.一些概念 JMS provider An implementat ...
- js导出报表
原文链接:https://blog.csdn.net/qq_37936542/article/details/78376156 需求:项目中有一个学生签到模块需要导出每天的签到数据,一开始用poi在后 ...
- PHP CodeBase: 判断用户是否手机访问
随着移动设备的普及,网站也会迎来越来越多移动设备的访问.用适应PC的页面,很多时候对手机用户不友好,那么有些时候,我们需要判断用户是否用手机访问,如果是手机的话,就跳转到指定的手机友好页面.这里就介绍 ...
- POJ 3252 Round Numbers(数位dp&记忆化搜索)
题目链接:[kuangbin带你飞]专题十五 数位DP E - Round Numbers 题意 给定区间.求转化为二进制后当中0比1多或相等的数字的个数. 思路 将数字转化为二进制进行数位dp,由于 ...
- js如何使用正则表达式验证电话号码(可选区号)和邮箱?(分步骤)
js如何使用正则表达式验证电话号码(可选区号)和邮箱?(分步骤) 一.总结 js进阶正则表达式16电话号码和邮箱正则(分类解决邮箱验证)(分组加?解决电话号码区号选择问题)([\w\.-]中括号解决邮 ...
- [TypeScript] Create a fluent API using TypeScript classes
You can create an easy to chain API using TypeScript classes. Learn about the thisreturn type annota ...
- Android 面试之横竖屏切换的Activity生命周期
public class EngineerJspActivity extends Activity { private static String Tag = "EngineerJspAct ...