题目链接:方差
把公式化成期望和公差的公式:
D(x
)=E(x
^2)-E(x
)*E(x
)
E(x
)=区间sum
/m
E(x
^2)=区间平方sum
/m
然后排序之后,尺取即可
AC代码:
#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
#define int long long
using namespace std
;
const int N
=1e6+10;
int n
,m
,s1
,s2
,a
[N
],res
=1e18;
signed main(){
cin
>>n
>>m
;
for(int i
=1;i
<=n
;i
++) scanf("%lld",&a
[i
]);
sort(a
+1,a
+1+n
);
for(int i
=1;i
<m
;i
++) s1
+=a
[i
],s2
+=a
[i
]*a
[i
];
for(int i
=m
;i
<=n
;i
++){
s2
+=a
[i
]*a
[i
]-a
[i
-m
]*a
[i
-m
],s1
+=a
[i
]-a
[i
-m
];
res
=min(res
,m
*s2
-s1
*s1
);
}
cout
<<res
;
return 0;
}
转载请注明原文地址:https://ipadbbs.8miu.com/read-51688.html