牛客網9.16模擬賽t1方差
阿新 • • 發佈:2018-12-10
這題本不想寫題解的,因為是極水的一道公式題 題目連結:方差
題目:
題意
一個長度為 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 的值。
題解:
把記為s,記為q 去掉a[k]的方差乘以(n-1)^2的值可表示為 展開化簡得 s,q預處理出來,每個詢問都是,總時間複雜度,空間
程式碼:
#include <iostream>
#include <stdio.h>
using namespace std;
const int N=1e5+5;
long long n,Ab,ASb,ai[N],bi[N];
long long cal(int k){
return (n-1ll)*ASb-Ab*Ab+2ll*bi[k]*Ab-n*bi[k]*bi[k];
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>bi[i];
Ab+=bi[i];
ASb+=bi[i]*bi[i];
}
cout <<cal(1);
for(int k=2;k<=n;k++)
cout<<" "<<cal(k);
cout<<endl;
return 0;
}