牛客网NOIP赛前集训营-提高组(第二场)A 方差
链接:https://www.nowcoder.com/acm/contest/173/A
来源:牛客网
题目描述
可以证明的是,如果序列元素均为整数,那么方差乘以 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
-->
备注:
对全部的测试数据,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 方差的更多相关文章
- 牛客网NOIP赛前集训营-提高组(第四场)游记
牛客网NOIP赛前集训营-提高组(第四场)游记 动态点分治 题目大意: \(T(t\le10000)\)组询问,求\([l,r]\)中\(k(l,r,k<2^{63})\)的非负整数次幂的数的个 ...
- 牛客网NOIP赛前集训营-提高组(第四场)B区间
牛客网NOIP赛前集训营-提高组(第四场)B区间 题目描述 给出一个序列$ a_1 \dots a_n$. 定义一个区间 \([l,r]\) 是好的,当且仅当这个区间中存在一个 \(i\),使得 ...
- 牛客网NOIP赛前集训营-提高组(第四场)B题 区间
牛客网NOIP赛前集训营-提高组(第四场) 题目描述 给出一个序列 a1, ..., an. 定义一个区间 [l,r] 是好的,当且仅当这个区间中存在一个 i,使得 ai 恰好等于 al, al+1, ...
- 牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告
目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网N ...
- 牛客网NOIP赛前集训营-提高组18/9/9 A-中位数
链接:https://www.nowcoder.com/acm/contest/172/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 牛客网NOIP赛前集训营-提高组(第八场)
染色 链接:https://ac.nowcoder.com/acm/contest/176/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言10 ...
- 牛客网NOIP赛前集训营 提高组(第七场)
中国式家长 2 链接:https://www.nowcoder.com/acm/contest/179/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K, ...
- [牛客网NOIP赛前集训营-提高组(第一场)]C.保护
链接:https://www.nowcoder.com/acm/contest/172/C来源:牛客网 题目描述 C国有n个城市,城市间通过一个树形结构形成一个连通图.城市编号为1到n,其中1号城市为 ...
- 牛客网NOIP赛前集训营-提高组(第一场)
牛客的这场比赛感觉真心不错!! 打得还是很过瘾的.水平也比较适合. T1:中位数: 题目描述 小N得到了一个非常神奇的序列A.这个序列长度为N,下标从1开始.A的一个子区间对应一个序列,可以由数对[l ...
随机推荐
- C++经典面试题库 附带参考答案
1. 面向对象的程序设计思想是什么? 答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象. 2. 什么是类? 答:把一些具有共性的对象归类后形成一个集合,也就是所谓的类. 3. ...
- POJ3186【区间DP】
题意: 每次只能取两端,然后第 i 次取要val[ i ]*i,求一个最大值 一切都是错觉[读者省略此段] 这道题目一开始想的就是记忆化搜索,然后太天真了?好像是,一开始用一维dp[ i ]直接代表一 ...
- bzoj 3704: 昊昊的机油之GRST【贪心+脑洞】
脑洞题大概 首先处理出每个位置需要操作的次数c,假设第一次达到目标就不能再走,这样的操作次数是c差分后值的正数和,就想成分治每一段然后同减最小值然后从0处断开 然后考虑能一圈一圈走的情况,连续一段多走 ...
- c++计算程序时间
#include<iostream.h> #include<time.h> void main() { clock_t start,finish; double totalti ...
- git 保存文件目录
Ubuntu中git clone就保存在你命令行现在所在的目录里 所以最好推荐 先用cd这个命令去自己想保存的目录 之后再git clone
- vue移动端开发全家桶
一句命令搞定全家桶: npm install vue-router vue-resource vuex --save main.js配置: import Vue from 'vue' impor ...
- eclipse | 配置JRE
Window --> Preference --> Java ---> Installed JREs
- Jmeter安装说明
本文主要介绍Jmeter工具的安装 一.安装JDK 1.下载jdk,到官网下载jdk,下载jkd1.8即可,地址:http://www.oracle.com/technetwork/java/java ...
- Asp.net WebApi 异常处理解决方案
一.使用异常筛选器捕获所有异常 我们知道,一般情况下,WebApi作为服务使用,每次客户端发送http请求到我们的WebApi服务里面,服务端得到结果输出response到客户端.这个过程中,一旦服务 ...
- bryce1010专题训练——树状数组
Bryce1010模板 1.一维树状数组 https://vjudge.net/contest/239647#problem/A[HDU1556] #include<bits/stdc++.h& ...