欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

鞍山邀请赛 部分题

发布时间:2025/3/16 编程问答 54 豆豆
生活随笔 收集整理的这篇文章主要介绍了 鞍山邀请赛 部分题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

http://acm.hdu.edu.cn/showproblem.php?pid=5073    

题意:给你n个行星,移动k个行星,绕他们的质心速度变得更大,使得这些行星的速度变得更大,那么就要使得

I的值更小即可,

#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; double zb[70100]; double sum[70005]; double s[70005];int main(){int t,n,m;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);for(int i = 1;i <= n;i++)scanf("%lf",&s[i]);if(m >= n - 1) {printf("0\n");continue;}sort(s+1,s+n+1);zb[0] = 0;sum[0] = 0;for(int i = 1;i <= n;i++){zb[i] = zb[i-1] + s[i];//预处理前n项和;sum[i] = sum[i-1] + s[i]*s[i];//预处理前n项平方和;}double zx1 = zb[n]/(n-m);double _min = sum[n] + (n-m) * zx1 * zx1 - 2 * zx1 * zb[n];//注意不移动的时候他的I值for(int i = n-m;i <= n ;i++)//苦逼的边界无限的WA{double tmp = zb[i] - zb[i-n+m];double r = tmp/(n-m);double k = sum[i] - sum[i-n+m];double ret = k + (n-m) * r * r - 2 * r * tmp;_min = min(ret,_min);}printf("%.10lf\n",_min);}return 0; }

总结

以上是生活随笔为你收集整理的鞍山邀请赛 部分题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。