标签: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