合肥工业大学oj 1257 简单问题

//先对数字进行排序,然后分割分别取平均值即可
//这里用到了一些动态规划的思想
//另外题目描述中有集合等字样
//实际上并不需要查重
#include<iostream>
#include<iomanip>
#include<algorithm>
using namespace std;
int list[1001];

int main(){
    int T;
    cin >> T;
    while(T--){
        int n;
        cin >> n;
        double ans = 0, sum_1 = 0, sum_2 = 0;
        for(int i = 0; i < n; i++){
            cin >> list[i];
            sum_2 += list[i];
        }
        sort(list, list + n);
        for(int i = 1; i < n; i++){
            double count = 0, ave_1 = 0, ave_2 = 0;
            sum_1 += list[i - 1];
            sum_2 -= list[i - 1];
            ave_1 = sum_1 / i;
            ave_2 = sum_2 / (n - i);
            for(int j = 0; j < i; j++)
                count += ((double)list[j] - ave_2) * ((double)list[j] - ave_2);
            for(int j = i; j < n; j++)
                count += ((double)list[j] - ave_1) * ((double)list[j] - ave_1);
            ans = max(ans, count);
        }
        cout << fixed << setprecision(4) << ans << endl;
    }

    return 0;
}

//presented by 大吉大利,今晚AC

猜你喜欢

转载自blog.csdn.net/lalala_HFUT/article/details/87967486