标签:des style blog http io ar color os sp
Description


Input
Output
Sample Input
2 3 2 -1 0 1 4 2 -2 -1 1 2
Sample Output
0 0.5
题意:给你2个数n,m n代表有n个点,m代表能进行m次移动点的操作,要你求出最小的I,表示为所有的点到中心点的距离平方和最小
思路: 可以把所有的点按照顺序排列下来,每次选取(n-k)的区间内的i,枚举所有的(n-k)区间,找出最小的
AC代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
#define N 50000+5
double a[N],b[N];
int main()
{
int n,k;
int i,j;
int t;
double mid;
double s1,s2;
scanf("%d",&t);
while(t--)
{
double sum=0;
scanf("%d %d",&n,&k);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
if(n!=k)
{
sort(a+1,a+n+1);
for(i=1;i<=n;i++)
b[i]=a[i]*a[i];
s1=s2=0;
for(i=1;i<=n-k;i++)
{
s1+=a[i];
s2+=b[i];
}
sum=s2-s1*s1/(n-k);
for(i=2,j=n-k+1;j<=n;i++,j++)
{
s1-=a[i-1];
s1+=a[j];
s2-=b[i-1];
s2+=b[j];
double t=s2-s1*s1/(n-k);
if(t<sum)
sum=t;
}
}
printf("%.12lf\n",sum);
}
return 0;
}
标签:des style blog http io ar color os sp
原文地址:http://blog.csdn.net/u012313382/article/details/41260987