首页 > 代码库 > HDU 5073 Galaxy (2014鞍山现场赛D题)
HDU 5073 Galaxy (2014鞍山现场赛D题)
题目链接:HDU 5073 Galaxy
题意:在一维的坐标系里,给出N个点坐标,转动K个点,使转动后这个星系的的惯性最小(根据题意惯性最小也就是 求所有星星到星系中心的距离最小,这个可以理解成方差最小)。求最小的惯性。
思路:
先对序列排序,再求出算N-K个点惯性的递推式。
以三个为例:
预处理是 平均数和各项的平方和,
注意:n==k的特判
AC代码:
#include <stdio.h> #include <algorithm> using namespace std; double pf[50010],sum[50010]; double a[50010]; int main() { int t; int n,k,i; double ave,minans,tempfc; scanf("%d",&t); while(t--) { memset(pf,0,sizeof pf); memset(sum,0,sizeof sum); scanf("%d %d",&n,&k); for(i=0;i<n;i++) scanf("%lf",&a[i]); if(n==k) { printf("%lf\n",0); continue; } sort(a,a+n); pf[0]=a[0]*a[0],sum[0]=a[0]; for(i=1;i<n;i++) { pf[i]=pf[i-1]+a[i]*a[i]; sum[i]=+sum[i-1]+a[i]; } //以上预处理 ave=sum[n-k-1]*1.0/(n-k); minans=pf[n-k-1]-2*ave*sum[n-k-1]+(n-k)*ave*ave; for(i=n-k;i<n;i++) { ave=(sum[i]-sum[i-(n-k)])/(n-k); tempfc=(pf[i]-pf[i-(n-k)])-2*ave*(sum[i]-sum[i-(n-k)])+(n-k)*ave*ave; minans=min(minans,tempfc); } printf("%lf\n",minans); } return 0; } /* 10 3 2 -1 0 1 4 2 -2 -1 1 2 3 3 -1 0 1 */
HDU 5073 Galaxy (2014鞍山现场赛D题)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。