题目

题意:n个点,运行移动k个点到任何位置,允许多个点在同一位置上。求移动k个点后,所有点到整体中心的距离的平方和最小。

分析:这题题目真的有点迷。。。一开始看不懂。得知最后是选取一个中心,于是看出来了方差的味道。这里便是求移动完成后方差的最小值,那么只需找连续n-k个最小的序列,然后把其他k个点都放在中心,即为正解。注意到(a[i]-ave)^2=a^2+ave^2-2*a*ave,可以在此化简代码。详情看代码。

#include <cstdio>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <queue> #define ll long long using namespace std;
const int maxn = ; int main(){
int t,n,k;
ll a[maxn];
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++) scanf("%lld",&a[i]);
if(n==k){
printf("0.000000000\n");
continue;
}
sort(a+,a++n);
ll sum=,tot=;
for(int i=;i<=n-k;i++){
sum+=a[i];
tot+=a[i]*a[i];
}
double ave=(sum*1.0)/(n-k);
double ans=ave*ave*(n-k)+tot-*ave*sum;
for(int i=;i<=k+;i++){
sum=sum-a[i-]+a[n-k+i-];
tot=tot-a[i-]*a[i-]+a[n-k+i-]*a[n-k+i-];
ave=(sum*1.0)/(n-k);
double t=ave*ave*(n-k)+tot-*ave*sum;
ans=min(t,ans);
}
printf("%.9lf\n",ans);
}
return ;
}

最新文章

  1. Linux 定时任务
  2. ios 静态库冲突的解决办法
  3. [css]样式合并与模块化
  4. 在linux安装mysql,并设置远程访问
  5. Java for LeetCode 059 Spiral Matrix II
  6. LotteryDrawing
  7. unique踢出相同元素
  8. QCon2013上海站总结 -- 前端开发
  9. Qt的gzip模块实现
  10. UITableView中复用cell显示信息错乱
  11. 在ASP.NET MVC中对手机号码的验证
  12. 解决.net的堆碎片化带来的内存占用过大的问题
  13. JS 阻止整个网页的内容被选中
  14. 阅读http://zh.lucida.me/有感
  15. 深入理解Java虚拟机--上
  16. springboot 中页面跳转问题:window.location.href
  17. 【Selenium】【BugList10】smtp发送邮件问题汇总:550/535/554
  18. (转)python 全栈开发,Day74(基于双下划线的跨表查询,聚合查询,分组查询,F查询,Q查询)
  19. go语言基础之获取命令行参数
  20. 双关键字LIS

热门文章

  1. [USACO18DEC]Balance Beam
  2. 【BZOJ3999】【TJOI2015】旅游 树剖
  3. 【BZOJ5294】[BJOI2018]二进制(线段树)
  4. A1142. Maximal Clique
  5. A1135. Is It A Red-Black Tree
  6. IOS11 底部输入框被手机输入法遮住
  7. windows中用bat脚本更改环境变量
  8. 第十五篇-EditText做简单的登录框
  9. pytest 3.fixture介绍一 conftest.py
  10. Codeforces Round #523 (Div. 2) C Multiplicity (DP)