链接:https://www.nowcoder.com/acm/contest/173/A
来源:牛客网

题目描述

一个长度为 m 的序列 b[1...m] ,我们定义它的方差为 ,其中  表示序列的平均值。
可以证明的是,如果序列元素均为整数,那么方差乘以 m^2 之后,得到的值一定是整数。

现在有一个长度为 N 的序列 a[1...N],对每个 i = 1~N,你需要计算,如果我们删除 a[i],剩下的 N-1 个元素的方差乘以 (N-1)^2 的值。

输入描述:

第一行一个整数 N。
接下来一行 N 个整数,第 i 个数表示 a[i]。

输出描述:

一行 N 个整数,第 i 个数表示删掉 a[i] 后,剩下元素的方差乘以 (N-1)^2 的值。

输入例子:
4
1 1 1 2
输出例子:
2 2 2 0

-->

示例1

输入

复制

4
1 1 1 2

输出

复制

2 2 2 0

说明

依定义可以计算 {1, 1, 2} 的方差为 1/3 * (1/9 + 1/9 + 4/9) = 2/9,{1, 1, 1} 的方差为 0

备注:

对全部的测试数据,N <= 10^5, | a[i] | <= 10^4

* 30 分的数据,N <= 1000
* 30 分的数据,N <= 10^5, a[i] 只有 30 种不同的取值
* 40 分的数据,无特殊限制

对于题目给出的石子我们当然要化简了,答案要乘$(n-1)^2$不如提前乘进去,那么式子:

将n-1带入,n-1也就是公式中的m
$$\frac{1}{n-1} \sum_{i=1}^{n-1}(b_i-\overline{b})^2 \times (n-1)^2=(n-1)\times \sum_{i=1}^{n-1}(b_i-\overline{b})^2$$

下面我们继续处理这个式子:
首先我们都知道$(a-b)^2=a^2+b^2-2ab$
那么

$$
\begin{aligned}
(n-1)\sum_{i=1}^{n-1}(b_i-\overline{b})^2&=(n-1) \times\sum_{i=1}^{n-1}({b_i}^2+\overline{b}^2+2b_i \overline{b})\\
&=(n-1) \times \left( \sum_{i=1}^{n-1}{b_i}^2+\sum_{i=1}^{n-1} \overline{b}^2+\sum_{i=1}^{n-1}2b_i \overline{b} \right)\\
&=(n-1) \times \sum_{i=1}^{n-1}{b_i}^2+(n-1)\times \sum_{i=1}^{n-1} \overline{b}^2-(n-1)\times\sum_{i=1}^{n-1}2b_i \overline{b}\\
\text{因为}\overline{b}&=\frac{\sum_{i=1}^{n-1}b_i}{n-1}\\
&=(n-1) \times\sum_{i=1}^{n-1}{b_i}^2+(n-1)\times\overline{b}-(n-1)\times \sum_{i=1}^{n-1}{2b_i}-(n-1) \times \sum_{i=1}^{n-1}b_i\\
&=(n-1) \times \sum_{i=1}^{n-1}{b_i}^2-(\sum_{i=1}^{n-1})^2
\end{aligned}
$$

答案是每个数的平方和减去每个数和的平方
那么我们只需要记录两个前缀和对于每个数$O(1)$输出,总时间复杂度$O(n)$

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
#define LL long long
LL a[];
LL sum1[],sum2[],n;
// sum(bi^2-2bi*b+b^2)*(n-1)
int main()
{
scanf("%lld",&n);
for(int i=;i<=n;i++)
{
scanf("%lld",&a[i]);
sum1[i]=sum1[i-]+a[i]*a[i];
sum2[i]=sum2[i-]+a[i];
}
LL num1=(sum1[n]-sum1[])*(n-);
LL num2=sum2[n]-sum2[];
printf("%lld",num1-num2*num2);
for(int i=;i<=n;i++)
{
LL num1=(sum1[n]-sum1[i]+sum1[i-])*(n-);
LL num2=sum2[n]-sum2[i]+sum2[i-];
printf(" %lld",num1-num2*num2);
}
}

牛客网NOIP赛前集训营-提高组(第二场)A 方差的更多相关文章

  1. 牛客网NOIP赛前集训营-提高组(第四场)游记

    牛客网NOIP赛前集训营-提高组(第四场)游记 动态点分治 题目大意: \(T(t\le10000)\)组询问,求\([l,r]\)中\(k(l,r,k<2^{63})\)的非负整数次幂的数的个 ...

  2. 牛客网NOIP赛前集训营-提高组(第四场)B区间

    牛客网NOIP赛前集训营-提高组(第四场)B区间 题目描述 给出一个序列$ a_1  \dots   a_n$. 定义一个区间 \([l,r]\) 是好的,当且仅当这个区间中存在一个 \(i\),使得 ...

  3. 牛客网NOIP赛前集训营-提高组(第四场)B题 区间

    牛客网NOIP赛前集训营-提高组(第四场) 题目描述 给出一个序列 a1, ..., an. 定义一个区间 [l,r] 是好的,当且仅当这个区间中存在一个 i,使得 ai 恰好等于 al, al+1, ...

  4. 牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告

    目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网N ...

  5. 牛客网NOIP赛前集训营-提高组18/9/9 A-中位数

    链接:https://www.nowcoder.com/acm/contest/172/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  6. 牛客网NOIP赛前集训营-提高组(第八场)

    染色 链接:https://ac.nowcoder.com/acm/contest/176/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言10 ...

  7. 牛客网NOIP赛前集训营 提高组(第七场)

    中国式家长 2 链接:https://www.nowcoder.com/acm/contest/179/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K, ...

  8. [牛客网NOIP赛前集训营-提高组(第一场)]C.保护

    链接:https://www.nowcoder.com/acm/contest/172/C来源:牛客网 题目描述 C国有n个城市,城市间通过一个树形结构形成一个连通图.城市编号为1到n,其中1号城市为 ...

  9. 牛客网NOIP赛前集训营-提高组(第一场)

    牛客的这场比赛感觉真心不错!! 打得还是很过瘾的.水平也比较适合. T1:中位数: 题目描述 小N得到了一个非常神奇的序列A.这个序列长度为N,下标从1开始.A的一个子区间对应一个序列,可以由数对[l ...

随机推荐

  1. 洛谷 - P1111 - 修复公路 - 并查集

    https://www.luogu.org/problemnew/solution/P1111 并查集的水题,水题都错了好多发. 首先并不是有环就退出,而是连通分支为1才退出,每次合并成功连通分支才会 ...

  2. bzoj 4550: 小奇的博弈【博弈论+dp】

    首先看出终止状态是全都堆在左边或者右边,然后发现黑的向左白的向右是最优策略(如果不能这样了也就该输了) 然后就不会了 参考 http://www.cnblogs.com/CQzhangyu/p/770 ...

  3. Codeforces732E Sockets

    首先检测有木有和Computer匹配的Socket,如果有则将其匹配. 然后将所有没有匹配的Socket连上Adapter,再去检测有木有Computer与Socket匹配. 重复这个操作31次,所有 ...

  4. print打印

    print打印输出的优点是简单直接粗暴有效,就是用print()把可能有问题的变量打印出来看看缺点是将来还得删掉它,想想程序里到处都是print(),运行结果也会包含很多垃圾信息 __________ ...

  5. 揭开Python科学计算的面纱

    春牛春杖.无限春风来海上.便与春工.染得桃红似肉红. 春幡春胜.一阵春风吹酒醒.不似天涯.卷起杨花似雪花. 标准的Python中用列表保存一组值,可以当做数组使用,但是由于其值类型任意,所以列表中保存 ...

  6. c++语言中类中的静态数据成员为什么必须在类体外初始化?

    静态成员属于全局变量,是所有实例化以后的对象所共享的,而成员的初始化你可以想象成向系统申请内存存储数据的过程,显然这种共有对象必须提前申请好,而不是由某个实例化的对象来操纵的. #include &l ...

  7. 线段树(单点更新) HDOJ 2795 Billboard

    题目传送门 /* 主要利用线段树求区间最值,sum[]代表位置可用空间 每次找到最大值的位置 功能:查询最靠前能容纳广告的位置 */ #include <cstdio> #include ...

  8. 【前端】jQurey Plugin

    ; (function ($, window, document, undefined) { "use strict"; var defaults = { name: " ...

  9. AJPFX总结方法的特点

    它可以实现独立的功能; 必须定义在类里面; 它只有被调用才会执行; 它可以被重复使用; 方法结束后方法里的对象失去引用;   如何定义一个功能,并通过方法体现出来: ① 明确该功能运算后的结果.明确返 ...

  10. Github-Client(ANDROID)开源之旅(三) ------ 巧用ViewPagerIndicator

    接上篇博文:Github-Client(ANDROID)开源之旅(二) ------ 浅析ActionBarSherkLock 文中结合了网易新闻客户端讲解了开源库ActionBarSherklock ...