1098 最小方差 (数论)

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 using namespace std;
 5
 6 typedef long long LL;
 7 const int MAXN = 1e4+5;
 8 const LL INF = 1e15+5;
 9 LL a[MAXN], sum[MAXN], ans[MAXN];
10
11 int main()
12 {
13     int n, m;
14     while(cin>>n>>m)
15     {
16         for(int i=1; i<=n; i++)
17             scanf("%lld",&a[i]);
18         sort(a+1, a+1+n);
19         sum[0] = ans[0] = 0;
20         for(int i=1; i<=n; i++){
21             sum[i] = sum[i-1] + a[i];           //前缀和
22             ans[i] = ans[i-1] + a[i]*a[i];      //^2的前缀和
23         }
24         double Min = INF;
25         for(int i=m; i<=n; i++){
26             double tmp = (ans[i]-ans[i-m])-1.0*(sum[i]-sum[i-m])*(sum[i]-sum[i-m]) / m;
27             if(tmp < Min)
28                 Min = tmp;
29         }
30         printf("%lld\n", (LL)Min);  //强行转不要小数点后面,防止四舍五入
31     }
32     return 0;
33 }

原文地址:https://www.cnblogs.com/jaydenouyang/p/8995593.html

时间: 2024-10-10 20:01:51

1098 最小方差 (数论)的相关文章

51Nod - 1098 最小方差

51Nod - 1098 最小方差 若x1,x2,x3......xn的平均数为k. 则方差s^2 = 1/n * [(x1-k)^2+(x2-k)^2+.......+(xn-k)^2] . 方差即偏离平方的均值,称为标准差或均方差,方差描述波动程度. 给出M个数,从中找出N个数,使这N个数方差最小. Input 第1行:2个数M,N,(M > N, M <= 10000) 第2 - M + 1行:M个数的具体值(0 <= Xi <= 10000) Output 输出最小方差 *

51NOD 1098 最小方差(基础数学)

传送门 若x1,x2,x3--xn的平均数为k. 则方差s^2 = 1/n * [(x1-k)^2+(x2-k)^2+--.+(xn-k)^2] . 方差即偏离平方的均值,称为标准差或均方差,方差描述波动程度. 给出M个数,从中找出N个数,使这N个数方差最小. Input 第1行:2个数M,N,(M > N, M <= 10000) 第2 - M + 1行:M个数的具体值(0 <= Xi <= 10000) Output 输出最小方差 * N的整数部分. Input示例 5 3 1

最小方差解释(线性代数看PCA)

PCA降维                         ——最小方差解释(线性代数看PCA)    注:根据网上资料整理而得,欢迎讨论 机器学习算法的复杂度和数据的维数有着密切关系,甚至与维数呈指数级关联.因此我们必须对数据进行降维. 降维当然意味着信息的丢失,不过鉴于实际数据本身常常存在的相关性,我们可以想办法在降维的同时将信息的损失尽量降低. PCA是一种具有严格数学基础并且已被广泛采用的降维方法. 协方差矩阵及优化目标 如果我们必须使用一维来表示这些数据,又希望尽量保留原始的信息,你要

算法笔记_164:算法提高 最小方差生成树(Java)

目录 1 问题描述 2 解决方案   1 问题描述 问题描述 给定带权无向图,求出一颗方差最小的生成树. 输入格式 输入多组测试数据.第一行为N,M,依次是点数和边数.接下来M行,每行三个整数U,V,W,代表连接U,V的边,和权值W.保证图连通.n=m=0标志着测试文件的结束. 输出格式 对于每组数据,输出最小方差,四舍五入到0.01.输出格式按照样例. 样例输入 4 51 2 12 3 23 4 24 1 12 4 34 61 2 12 3 23 4 34 1 12 4 31 3 30 0 样

蓝桥杯——算法提高 最小方差生成树

一.思路 枚举所有生成树的边权和值,对每一个枚举的边权和值sum,修改所有边的边权为(es[i].cost - sum * 1.0 / (N - 1))2,即方差公式的分子,然后跑最小生成树算法,同时记录边的原来的权值和,如果求出的“最小方差”生成树的边权值和为sum,那么,用这个"最小方差"去更新答案. 二.复杂度分析 时间复杂度:O(N * W * M * logM).N * W为枚举边权和值的时间.边权和值最小为0,最大为(N - 1) * W. 三.PS 这题据说蓝桥杯官网数据

【BZOJ3754】Tree之最小方差树

Description Wayne在玩儿一个很有趣的游戏.在游戏中,Wayne建造了N个城市,现在他想在这些城市间修一些公路,当然并不是任意两个城市间都能修,为了道路系统的美观,一共只有M对城市间能修公路,即有若干三元组 (Ui,Vi,Ci)表示Ui和Vi间有一条长度为Ci的双向道路.当然,游戏保证了,若所有道路都修建,那么任意两城市可以互相到达.Wayne拥有恰好N-1支修建队,每支队伍能且仅能修一条道路.当然,修建长度越大,修建的劳累度也越高,游戏设定是修建长度为C的公路就会有C的劳累度.当

【枚举】【最小生成树】【kruscal】bzoj3754 Tree之最小方差树

发现,若使方差最小,则使Σ(wi-平均数)最小即可. 因为权值的范围很小,所以我们可以枚举这个平均数,每次把边权赋成(wi-平均数)2,做kruscal. 但是,我们怎么知道枚举出来的平均数是不是恰好是我们的这n-1条边的呢? 就在更新答案的时候加个特判就行了. 1 #include<cstdio> 2 #include<algorithm> 3 #include<cmath> 4 #include<cstring> 5 using namespace st

BZOJ 3754 Tree之最小方差树 MST

题目大意:求一个图的最小标准差生成树. 思路:毫无思路,之后看了题解.居然是一个很厉害的暴力. 一个很关键的地方:枚举平均值,然后根据(a - ave(a))^2将边排序,做最小生成树.所有的标准差最小值就是答案. 但是这是为什么?如果当前枚举的ave(a)并不是选取的边的平均值怎么办? 那么就一定有一个你会枚举到的ave(a)计算之后的标准差要比现在小. 这样基本就可以说明这个做法的正确性了.但是需要枚举的范围很大,虽然c只有100,但是按照多大枚举呢.很显然是按照EPS = 1.0 / (m

$loj530\ [LibreOJ\ \beta\ Round \#5]$ 最小倍数 数论

正解:数论 解题报告: 传送门$QwQ$! 不想做题,来水点儿简单点的$QwQ$. 一个显然的点在于可以直接对不同质因子分别算$n_{min}$最后取$max$. 这个正确性还是蛮显然的?因为只要有$n\geq n_{min}$就一定能整除这个质因子呗$QwQ$. 现在就只要分别求这个$n_{min}$了 考虑二分呗,然后$n!$中$x$的指数之和就是$\sum \frac{n}{x^i}$ $over$ 原文地址:https://www.cnblogs.com/lqsukida/p/11676