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. change all column to char

    http://bluefrog-oracle.blogspot.com/2011/09/script-submitted-to-otn-to-altter.html Script to Alter v ...

  2. OpenCV常用基本处理函数(7)图像金字塔和直方图

    高斯金字塔 高斯金字塔的顶部是通过将底部图像中的连续的行和列去除得到的.顶部图像中的每个像素值等于下一层图像中 5 个像素的高斯加权平均值. 这样操作一次一个 MxN 的图像就变成了一个 M/2xN/ ...

  3. 用idea将本地项目提交到gitlab上

    提交的前提是你必须有gitlab的地址 以下是将本地代码提交到gitlab上 在idea的菜单项选择 VCS>Import into Version Control>Create Git ...

  4. 利用PHP和百度ai实现文本以及图片的审核

    步骤: 首先打开百度ai 开发平台 注册一个账号: 注册账号,进入控制台 创建自己的应用,获取apikey 和秘钥 进入文档页 文本审核: 图像审核: 代码实例: class Sentive { pr ...

  5. postgres服务相关语法

    远程登陆 psql -h 主机 -U 用户 -p端口 -W -d 数据库 #-W表示密码,例如:psql -h 192.168.137.3 -U postgres -p 5432 -W -d post ...

  6. Qt对话框部分学习

    一.对话框部分常用内容 颜色对话框.文件对话框.字体对话框.输入对话框.消息对话框.进度对话框.错误对话框.向导对话框. 二.代码部分   //widget.h #ifndef MYWIDGET_H ...

  7. 函数————swap

    swap(vec[i],vec[j]); 交换两个元素.

  8. [NOIP模拟测试38]题解

    来自达哥的问候…… A.金 显然本题的考察点在于高精而不是裴蜀定理 根据裴蜀定理易得答案为Yes当且仅当$gcd(n,m)=1$,那么考虑怎么在高精度下判互质. 如果$n,m$都能被2整除,那么显然不 ...

  9. 《ArcGIS Runtime SDK for .NET开发笔记》--在线编辑

    介绍 ArcGIS可以发布具有编辑功能的Feature Service.利用Feature Service我们可以实现对数据的在线编辑. 数据制作参考: https://server.arcgis.c ...

  10. map-DBA-comands