HDU 5073 Galaxy(2014鞍山赛区现场赛D题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5073
解题报告:在一条直线上有n颗星星,一开始这n颗星星绕着重心转,现在我们可以把其中的任意k颗星星移动到这条直线上的任意位置然后围绕这个新的重心转, 这个星系的惯性值I = w1 * d1^2 + w2 * d2 ^ 2 +......+wn * dn ^ 2,其中wi表示第i颗星星的重量,di表示第i颗星星到这个星系的重心的距离.然后现在要你求转移k颗星星之后惯性值最小是多少?
n颗星星转移k颗后还剩下n-k颗是不能移动的,很显然转移的k颗星星一定是转移到重心的位置,然后每颗星星的重量都是1,所以求I时就可以不用管wi了,然后我们可以枚举n-k个星星所在的区间,而且可以确定这n-1个星星在位置上一定是连续的.然后枚举出了k个区间,怎么能在O(1)时间算出每个区间的I值呢?作如下转化(其中e表示重心的坐标):
(x1-e)^2 + (x2-e)^2 (x3-e)^2+....(xn-e)^2
=x1^2 + x2^2+...xn^2 + n * e^2 - 2*e*(x1+x2+x3+...xn)
这样通过预先求出x1的平方到xn的平方的和还有x1到xn的和就可以在O(1)时间内求出I的值了.
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
const int maxn = ;
const double eps = 1e-; int T,n,k;
double pos[maxn],sump[maxn],sump2[maxn];
int main()
{
// freopen("in","r",stdin);
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&k);
for(int i = ;i <= n;++i)
scanf("%lf",&pos[i]);
sort(pos+,pos+n+);
sump[] = sump[] = sump2[] = sump2[] = ;
for(int i = ;i <= n;++i)
{
sump[i] = sump[i-] + pos[i];
sump2[i] = sump2[i-] + pos[i] * pos[i];
}
int m = n - k;
if(m <= )
{
puts("");
continue;
}
double ans = sump2[m] + m * (sump[m] / m) * (sump[m] / m) - 2.0 * (sump[m] / m) * sump[m];
for(int e = m;e <= n;++e)
{
int s = e - m + ;
double eve = (sump[e] - sump[s-]) / m;
double temp = sump2[e] - sump2[s-] + m * eve * eve - 2.0 * eve * (sump[e] - sump[s-]);
ans = min(ans,temp);
}
printf("%.12lf\n",ans);
}
return ;
}
HDU 5073 Galaxy(2014鞍山赛区现场赛D题)的更多相关文章
- HDU 5071 Chat(2014鞍山赛区现场赛B题)
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 解题报告:一个管理聊天窗口的程序,一共有八种操作,然后要注意的就是Top操作只是把编号为u的窗口 ... 
- HDU 5074 Hatsune Miku(2014鞍山赛区现场赛E题)
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5074 解题报告:给出一个长度为n的序列,例如a1,a2,a3,a4......an,然后这个序列的美丽 ... 
- HDU 5120 Intersection(2014北京赛区现场赛I题 计算几何)
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5120 解题报告:给你两个完全相同的圆环,要你求这两个圆环相交的部分面积是多少? 题意看了好久没懂.圆环 ... 
- HDU 5128 The E-pang Palace(2014广州赛区现场赛B题 计算几何)
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5128 解题报告:在一个平面上给出n个点的坐标,用这n个点作为矩形的四个顶点,作两个矩形,要求两个矩形不 ... 
- HDU 5120 A Curious Matt(2014北京赛区现场赛A题 简单模拟)
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5112 解题报告:扫一遍 #include<cstdio> #include<cstr ... 
- HDU 5073 Galaxy 2014 Asia AnShan Regional Contest 规律题
		推公式 #include <cstdio> #include <cmath> #include <iomanip> #include <iostream> ... 
- HDU 5073 Galaxy (2014 Anshan D简单数学)
		HDU 5073 Galaxy (2014 Anshan D简单数学) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5073 Description G ... 
- 2014 ACM/ICPC 鞍山赛区现场赛 D&I 解题报告
		鞍山现场赛结束了呢-- 我们出的是D+E+I三道题-- 吾辈AC掉的是D和I两道,趁着还记得.先在这里写一写我写的两道水题D&I的解题报告吧^_^. D题的意思呢是说星云内有一堆排成一条直线的 ... 
- HDU 4816 Bathysphere (2013长春现场赛D题)
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4816 2013长春区域赛的D题. 很简单的几何题,就是给了一条折线. 然后一个矩形窗去截取一部分,求最 ... 
随机推荐
- ecshop 给商品随机添加评论
			<?php /* * 随机插入商品评论 * * * */ define('IN_ECS', true); require(dirname(__FILE__) . '/includes/init. ... 
- PHP获取当前日期和时间及格式化方法参数
			使用函式 date() 实现 <?php echo $showtime=date("Y-m-d H:i:s");?> 显示的格式: 年-月-日 小时:分钟:秒 相关时间 ... 
- Java-IO之DeflaterOutputStream和InflaterOutputStream
			此类为使用 "deflate" 压缩格式压缩数据实现输出流过滤器 example import java.io.File; import java.io.FileInputStre ... 
- 纯css3实现旋转的太极图
			效果图: 代码如下: <!DOCTYPE html> <html> <head lang="zh"> <meta charset=&quo ... 
- spark操作geoip的domain数据库
			val ipv4 = sc.textFile("hdfs://hbase11:9000/sparkTsData/GeoIP2-Domain-Blocks-IPv4.csv").ma ... 
- JVM 关闭钩子
			1.功能 在jvm中添加关闭钩子(Runtime.getRuntime().addShutdownHook(shutdownHook);)后,当jvm关闭时会执行系统中已经设置的所有通过该方法添加的钩 ... 
- 为什么可以用while(cin)?
			为什么可以用while(cin)? /** * @brief The quick-and-easy status check. * * This allows you to write const ... 
- SVN合并操作实践
			大家都知道,SVN是很多公司管理代码的版本控制工具,当分支越来越多,版本迭代越来越频繁的时候,经常会出现代码冲突的头疼事儿,这里讲一下鲨鱼遇到过关于代码版本控制的一些事,最后做个小例子,看图描述. 为 ... 
- VC亲自教你写BP
			2015年5月24日下午,腾讯开放平台“创业ABC”沙龙在腾讯众创空间(上海)举行.活动以“创业融资实战——从计划书到如何估值到如何花钱”为主题,险峰华兴投资负责人徐建海先生现场分享<如何写BP ... 
- cookie, localStorage, sessionStorage区别
			cookie 有过期时间,默认是关闭浏览器后失效,4K,兼容ie6,不可跨域,子域名会继承父域名的cookielocalStorage 永不过期,除非手动删除,5M,兼容IE8,不可跨域,子域名不能继 ... 
