Galaxy

在一维坐标轴上给出n个点,第i个点坐标为\(x_i\),现在你可以任意移动k个点的,最小化它们的方差,\(n\leq 50000\)。

感觉以前写的太乱了,补一篇可以供快速阅读的题解

首先方差有个公式\(\sum_{i=1}^n(x_i-\bar{x})^2=\sum_{i=1}^nx_i^2-n\bar{x}^2\),假设我们已经确定了移动那些点,假设移动的是\(x_1,x_2,...,x_k\),那么要让方差最大,就相当于是一个多元函数求最值的问题,设\(F(x_1,...,x_k)=\sum_{i=1}^nx_i^2-n\bar{x}^2\),结论是关于各个变量的偏导为\(0\)的时候取到最值,也就是对于任意一个\(j\)有\(x_j=\dfrac{\sum_{i=1,i\ne j}^n}{n-1}\),如果\(k=1\),那么这个点恰好是在剩下点的平均数取到,因此可以猜测这\(k\)个点都是在剩下点的平均数位置,证明参考原来的版本就可以了。

然后答案就是\(\sum_{i=1}^nx_i^2-n\bar{x}^2=\sum_{i=k+1}^nx_i^2-(n-k)\bar{x}^2\),这个恰好就是剩下\(n-k\)个数的方差,最小化,这要让他们坐标连续即可,这样就可以做到\(O(n^2)\),考虑枚举右端点,看左端点套路,预处理平方和和前缀和,就可以做到\(O(n)\)了。


设\(\bar{x}=\frac{\sum_{i=1}^nx_i}{n}\),容易知道方差为

\[\sum_{i=1}^n(x_i-\bar{x})^2=\sum_{i=1}^nx_i^2-n\bar{x}^2
\]

对于只移动一个点坐标x来看,显然可以看成一个二次函数,即

\(f(x)=\sum_{i=1}^n{x_i}^2-n\bar{x}^2\)

因为化简过于复杂,对它进行求导,这样与x无关的项都可以丢掉了

\[f(x)'=(\sum_{i=1}^n{x_i}^2-n\bar{x}^2)'=2x-n(\bar{x}^2)'=2x-n2\bar{x}(\bar{x})'=
\]

\[2x-2\bar{x}(\sum_{i=1}^nx_i)'=2x-2\bar{x}
\]

容易知道随着x的增加,这个导函数是在单调递增的,因此它存在最小值,显然是在驻点处取到,故令\(f(x)'=0\),有

\(x=\bar{x}\Rightarrow x=\frac{\sum_{i=1}^nx_i-x}{n-1}\)

于是对于只动一个坐标x而言,x取到除x以外的点的平均值所在的点就是答案,我们还可以得到一个结论,往数的集合中加入它的平均数,不改变新的集合的平均数。

但是我们需要讨论k个点的情况,于是对于每个点\(x_i\)我们可以有(不妨假设这k个点为\(x_1,x_2,..,x_k\)),那么分别有

\[x_1=\frac{\sum_{i=1}^nx_i-x_1}{n-1},x_2=\frac{\sum_{i=1}^nx_i-x_2}{n-1}...
\]

\[x_k=\frac{\sum_{i=1}^nx_i-x_k}{n-1}
\]

累加起来有

\[(n-1)\sum_{i=1}^kx_i=k\sum_{i=1}^nx_i-\sum_{i=1}^kx_i
\]

也就是

\[n\sum_{i=1}^kx_i=k\sum_{i=1}^nx_i
\]

也就是

\[\frac{\sum_{i=1}^kx_i}{k}=\frac{\sum_{i=1}^nx_i}{n}
\]

于是我们得到了k个要动的数的平均值恰好为n个数的平均值,继续变

\[n\sum_{i=1}^kx_i=k\sum_{i=1}^nx_i\Rightarrow n\sum_{i=1}^kx_i=k\sum_{i=1}^kx_i+k\sum_{i=k+1}^nx_i
\]

\[(n-k)\sum_{i=1}^kx_i=k\sum_{i=k+1}^nx_i
\]

也就是

\[\frac{\sum_{i=1}^kx_i}{k}=\frac{\sum_{i=k+1}^nx_i}{n-k}
\]

整理起来也就有

\[\frac{\sum_{i=1}^kx_i}{k}=\frac{\sum_{i=k+1}^nx_i}{n-k}=\frac{\sum_{i=1}^nx_i}{n}
\]

所以可以得出一个很棒的结论,向一个集合中加入若干个平均数为改个集合的平均数,平均数不变,原来的集合的平均数等于加进的平均数等于新集合的平均数,而且满足两个相等,可以推出三个相等。

现在考虑k个数的方差,方差显然转换成下式比较好研究

\[\sum_{i=1}^nx_i^2-n\bar{x}^2
\]

其余n-k个数字是常量(包括平均数),拆开有

\[\sum_{i=1}^kx_i^2+\sum_{i=k+1}^{n}x_i^2-n\bar{x}^2
\]

于是要让整个式子最小化,也就是最小化

\[\sum_{i=1}^nx_i^2=x_1^2+x_2^2+...+x_k^2
\]

根据均值不等式,容易知道最小化这个式子,要满足\(x_1=x_2=...=x_k\)。

而我们有\(\frac{x_1+x_2+...+x_k}{k}=\frac{kx_1}{k}=x_1=\bar{x}\),于是有

\[x_1=x_2=...=x_k=\bar{x}=\frac{\sum_{i=k+1}^{n-k}x_i}{n-k}
\]

也就是对于这k个数字,我们只要都放到剩下的数字平均数所在位置即可,而根据方差定义式。

\[\sum_{i=1}^n(x_i-\bar{x})^2
\]

容易知道,此时这k个数字所产生的影响为0,因为\(x_i=\bar{x}(i=1,2,...,k)\)

于是我们只要考虑剩下n-k个数字的方差即可,而根据方差的实际含义,数字的离散程度,于是剩下n-k个数字要尽可能集中,于是我们只需要将所有坐标排序,取连续的长度为\(n-k\)的区间,把它们的方差取max即可,为了快速求出方差,我们根据推广式

\[\sum_{i=1}^nx_i^2-n\bar{x}^2
\]

而\(\bar{x}=\frac{\sum_{i=1}^nx_i}{n}\),因此我们只要维护平方的前缀和和普通的前缀和,带入这个式子计算,就可以做到\(O(1)\)查询区间的方差了,整个时间复杂度仅有\(O(n)\)。

参考代码:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#define il inline
#define ri register
#define lb double
#define Size 50500
using namespace std;
lb a[Size],sum[Size],sum2[Size];
int main(){
int lsy,n,k;scanf("%d",&lsy);
while(lsy--){
scanf("%d%d",&n,&k);
for(int i(1);i<=n;++i)
scanf("%lf",&a[i]);
if(n==k){printf("%.11lf\n",(lb)0);continue;}
sort(a+1,a+n+1);lb ans(1e100);k=n-k;
for(int i(1);i<=n;++i)
sum[i]=sum[i-1]+a[i],
sum2[i]=sum2[i-1]+a[i]*a[i];
for(int i(k);i<=n;++i)
ans=min(ans,sum2[i]-sum2[i-k]-k*pow((sum[i]-sum[i-k])/k,2));
printf("%.11lf\n",ans);
}
return 0;
}

Galaxy的更多相关文章

  1. Galaxy Classification

    10.3 Data Preparation After removing a large number of the columns from the raw SDSS dataset, introd ...

  2. DFS --- HNU 13307 Galaxy collision

    Galaxy collision Problem's Link Mean: 给定二维坐标平面内的n个整数点,让你把这n个点划分为两个集合,同一集合内的所有点必须两两距离大于5,求这两个集合的元素个数之 ...

  3. 2014 Asia AnShan Regional Contest --- HDU 5073 Galaxy

    Galaxy Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=5073 Mean: 在一条数轴上,有n颗卫星,现在你可以改变k颗 ...

  4. 技术解析:锁屏绕过,三星Galaxy系列手机也能“被”呼出电话

    近期,由两位安全研究人员,Roberto Paleari及Aristide Fattori,发布了关于三星Galaxy手机设备安全漏洞的技术细节.据称,Galaxy手机可在锁屏状态下被未授权的第三方人 ...

  5. 三星Galaxy Note 10.1 N8010 最后的救赎 Andorid 5.0.2 ROM

    上市日期为2012年的三星Galaxy Note N8010 10.1采用10.1英寸TFT屏幕,分辨率为1280×800,支持10点触控,支持S pen手写笔功能.,拥有一颗1.4GHz Exyno ...

  6. 三星galaxy s4问题解决及快捷操作

    http://blog.csdn.net/pipisorry/article/details/38474827 三星galaxy s4更改锁屏方式时出现故障 屏幕锁定设置除password以外,其它锁 ...

  7. 三星手机 Samsung Galaxy S3 无法复制粘贴的不完美解决方法

    问题简单描述 从上周开始我的Samsung Galaxy S3手机就无法实现复制粘贴功能了,每次复制时都提示复制到了剪贴板,但是粘贴时就会发现根本粘贴不了,无法打开剪贴板.真的是莫明其妙啊,我的手机没 ...

  8. 【数学,方差运用,暴力求解】hdu-5037 Galaxy (2014鞍山现场)

    话说这题读起来真费劲啊,估计很多人做不出来就是因为题读不懂...... 从题目中提取的几点关键点: 题目背景就是银河系(Rho Galaxy)中的星球都是绕着他们的质心(center of mass) ...

  9. HDOJ 5073 Galaxy 数学 贪心

    贪心: 保存连续的n-k个数,求最小的一段方差... .预处理O1算期望. .. Galaxy Time Limit: 2000/1000 MS (Java/Others)    Memory Lim ...

  10. ZOJ 3261 - Connections in Galaxy War ,并查集删边

    In order to strengthen the defense ability, many stars in galaxy allied together and built many bidi ...

随机推荐

  1. redis笔记3-命令

    通用命令:keys * --查询所有keykeys list* --查询list开头的keytype key1 --查询键对应的value类型del key --删除指定的keyttl key --查 ...

  2. 数据结构---Java---String

    1.概述 1.1 源码(JDK1.8) public final class String implements java.io.Serializable, Comparable<String& ...

  3. Django 与 Flask框架的比较

    Django Django恐怕是最有代表性的Python框架了.它是一个遵循MMVC架构模式的开源框架.它的名字来自Django Reinhardt,一个法国作曲家和吉他演奏家,很多人认为他是历史上最 ...

  4. select 1 from ... sql语句中的1解读

    摘自:http://blog.csdn.net/zengcong2013/article/details/48224509 select  1 from ..., sql语句中的1代表什么意思?查出来 ...

  5. Mybatis基于XML配置SQL映射器(二)

    Mybatis之XML注解 之前已经讲到通过 mybatis-generator 生成mapper映射接口和相关的映射配置文件: 下面我们将详细的讲解具体内容 首先我们新建映射接口文档  sysUse ...

  6. location优先级

    location优先级 location优先级 location /img # 直接匹配 location /img { index index.html } location = /img # 精确 ...

  7. html相关操作点

    $( "#members li a" ).bind( "click", function( e ) {} ); $( document ).live( &quo ...

  8. python requests函数封装方法

    python  requests函数封装方法 上代码 import requests import json """ 封装request请求, 1.post:my_pos ...

  9. 详解代理自动配置 PAC

    转自知乎 最近一直在做跨域中华局域网的工作,了解了很多代理知识和基础概念,很零散,也很细碎.希望通过一段时间的学习,能够自由地穿梭在国际互联网和中华局域网之间.后续会写一系列文章记录我了解到的知识点, ...

  10. Nginx网络架构实战学习笔记(六):服务器集群搭建、集群性能测试

    文章目录 服务器集群搭建 Nginx---->php-fpm之间的优化 302机器 202机器 压力测试 搭建memcached.mysql(数据准备) 今晚就动手-.- 集群性能测试 服务器集 ...