标签:angular sort als mod next using exce hdu less
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;
}
标签:angular sort als mod next using exce hdu less
原文地址:http://www.cnblogs.com/wzjhoutai/p/7258384.html