日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【51nod - 1098】 最小方差(基础数学,公式化简,前缀和,积的前缀和)

發(fā)布時(shí)間:2023/12/10 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【51nod - 1098】 最小方差(基础数学,公式化简,前缀和,积的前缀和) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題干:

若x1,x2,x3……xn的平均數(shù)為k。?則方差s^2 = 1/n * [(x1-k)^2+(x2-k)^2+…….+(xn-k)^2] 。?方差即偏離平方的均值,稱為標(biāo)準(zhǔn)差或均方差,方差描述波動(dòng)程度。?
給出M個(gè)數(shù),從中找出N個(gè)數(shù),使這N個(gè)數(shù)方差最小。?
Input?
第1行:2個(gè)數(shù)M,N,(M > N, M <= 10000)?
第2 - M + 1行:M個(gè)數(shù)的具體值(0 <= Xi <= 10000)?
Output?
輸出最小方差 * N的整數(shù)部分。?
Input示例?
5 3?
1?
2?
3?
4?
5?
Output示例?
2

解題報(bào)告:

? ? 首先想到這題肯定是要排序的,方差就是穩(wěn)定程度嘛,肯定相鄰的兩個(gè)數(shù)好過不相鄰的兩個(gè)數(shù),然后我們進(jìn)行公式化簡:

因?yàn)槲覀冎?#xff0c;數(shù)據(jù)范圍是1e4,所以n^2的復(fù)雜度雖然也可以但是我們還有更優(yōu)秀的nlogn的方法:排序用去了nlogn,所以其他的部分最好在o(n)內(nèi)完成。而我們觀察原公式后發(fā)現(xiàn)如果直接求的話,那每一次遍歷都需要o(m)求一遍k,那就又成o(nm)復(fù)雜度了,和n^2是一個(gè)數(shù)量級(jí)的,肯定不行,所以我們考慮用這一條性質(zhì)巧妙的把k約掉,發(fā)現(xiàn)得出的這兩項(xiàng)剛好滿足前綴和類性質(zhì),于是可以o(1)查詢了,然后o(n-m)遍歷一遍,就可以出答案了。

?

下面上代碼:

#include<bits/stdc++.h> #define ll long long using namespace std; const int MAXN = 1e4+5;ll a[MAXN], sum[MAXN], summ[MAXN]; int main() {int n,m;cin>>n>>m;for(int i=1; i<=n; i++) {scanf("%lld",&a[i]);}sort(a+1, a+1+n);sum[0] = summ[0] = 0;for(int i=1; i<=n; i++) {sum[i] = sum[i-1] + a[i];summ[i] = summ[i-1] + a[i]*a[i];}double minn = (double)LLONG_MAX;for(int i=m; i<=n; i++) {double tmp = (summ[i]-summ[i-m])-1.0*(sum[i]-sum[i-m])*(sum[i]-sum[i-m])/m;minn = min(tmp,minn);}printf("%lld\n",(ll)floor(minn));return 0; }

總結(jié):? ?由此我們也知道,不僅是值可以求前綴和,任何一個(gè)我們想知道的值,只要不帶更新操作,都可以求前綴和。

總結(jié)

以上是生活随笔為你收集整理的【51nod - 1098】 最小方差(基础数学,公式化简,前缀和,积的前缀和)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。