hdu 2014鞍山赛区 5073 Galaxy

简介:
题意:就是给你 n 个数,代表n个星球的位置,每一个星球的重量都为 1 !
开始的时候每一个星球都绕着质心转动,那么质心的位置就是所有的星球的位置之和 / 星球的个数
现在让你移动 k 个星球到任意位置(多个星球可以在同一个位置并且所有的星球在同一直线上) 
移动之后那么它们质心的位置就可能发生变化,求 I = sum(di^2) di (表示第i个星球到达质心的距离)最小! 

设d为n-k个星球的质心位置,如果I值最小,那么移动的k个星球一定都放在另外n-k个星球的质心上,
并且这n-k个星球一定是连续的!越密集方差越小嘛..... 
x1, x2, x3, x4,....x(n-k)表示余下n-k个星球的位置 
思路:I = sum(di^2) = (x1-d)^2 + (x2-d)^2 + (x3-d)^2 ....

= sum(xi^2) + (n-k)*d*d - 2*d*sum(xi);


#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define N 50050
using namespace std;
double num[N];
double s1[N], s2[N];
int main(){
    int n, t, k;
    scanf("%d", &t);
    while(t--){
        scanf("%d%d", &n, &k);
        for(int i=1; i<=n; ++i)
            scanf("%lf", &num[i]);
        sort(num+1, num+n+1);//对星球的位置排一下序 
        for(int i=1; i<=n; ++i)//分别计算前缀num[i] 的和 以及 num[i]^2的和 
            s1[i] = s1[i-1] + num[i], s2[i] = s2[i-1] + num[i]*num[i];
        int m = n-k;
        double ans = 1000000000000000000.0;//ans要足够大.... 最好不用long long,可能会超.... 
        for(int i=1; m && i+m-1<=n; ++i){
            int j = i+m-1;
            double d = (s1[j] - s1[i-1])/m;
            double tmp = s2[j] - s2[i-1] - 2*d*(s1[j] - s1[i-1]) + m*d*d;
            if(ans > tmp) ans = tmp;
        }
        if(n == k) ans = 0.0; 
        printf("%.9lf\n", ans);
    }
    return 0;
}


目录
相关文章
|
9月前
|
人工智能 机器人
第10届山东省赛Wandering Robot(详细思路)
第10届山东省赛Wandering Robot(详细思路)
55 0
|
缓存 算法 Java
【PAT乙】2022秋季赛后总结
这个暑假博主利用见习和闲暇的时间刷完了PAT乙级的110道题目,首先来说说我的感受吧,题目呢不是很难涉及到的知识点呢也不多,像一些常见的HashMap,数组,自定义类,大数,排序,双指针,重写CompareTo方法都是常考点,乙级也没有涉及什么复杂的数据结构,最多也就考考链表,真题呢博主做了今年的春季和夏季赛,感觉春季难度和这次的秋季难度差不多,夏季赛应该算是最难的了,其中最后一道手撸操作系统中的LRU缓存算法,实属是把我看懵逼了,好在这次秋季赛难度一般,做起来感觉还是比较顺利的!
【PAT乙】2022秋季赛后总结
HDU-2897,邂逅明下(巴什博弈)
HDU-2897,邂逅明下(巴什博弈)
|
人工智能 算法
[UPC] 山东省第九届省赛 Games | dp
题意: 有n堆石子,后手可以在游戏开始之前挪走不超过d堆,然后问后手赢得游戏的方案数量 % 1e9 + 7 思路: 先求出所有数的亦或和 设d p [ i ] [ j ] [ k ] dp[i][j][k]dp[i][j][k]为前 i ii 堆石子挪走 j jj 堆,并且亦或和为 k kk 的方案数 然后进行dp
97 0
|
算法
HDU - 2063: 过山车
HDU - 2063: 过山车
109 0
|
物联网
卢伟冰与Redmi:过河的兵卒
2019年8月29日,卢伟冰在小米科技园发布了Redmi Note 8和Redmi Note 8 Pro,两款手机,还有Redmi品牌的首款电视以及RedmiBook 14增强版。
134 0
卢伟冰与Redmi:过河的兵卒