【JZOJ 4585】Robert 的军队
2016-07-08 12:57
302 查看
Description
Solution
首先有一个证明: 一列数的方差如果再加上一个数,方差并不会更优。感性上感觉没有问题,
理性证明:留给读者们思考(提示:设加上一个数后的平均数加上了q,带入方差式并化简)。
所以,只要选L个即可,爱咋搞炸搞,
复杂度:O(n)
Code
#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #define fo(i,a,b) for(int i=a;i<=b;i++) #define sqr(a) ((a)*(a)) using namespace std; typedef long long LL; typedef double db; const int N=100500; const LL INF=9223372036854775800; int read(int &n) { char ch=' ';int q=0,w=1; for(;(ch!='-')&&((ch<'0')||(ch>'9'));ch=getchar()); if(ch=='-')w=-1,ch=getchar(); for(;ch>='0' && ch<='9';ch=getchar())q=q*10+ch-48;n=q*w;return n; } int m,n,L,R; LL a ,c ; db b ; db ans; int main() { freopen("army.in","r",stdin); freopen("army.out","w",stdout); int q; read(n),read(L),read(R); fo(i,1,n)a[i]=read(q); sort(a+1,a+1+n); fo(i,1,n)b[i]=b[i-1]+sqr(a[i]),c[i]=c[i-1]+a[i]; ans=INF; fo(i,1,n-L+1) { db q=b[i+L-1]-b[i-1],w=c[i+L-1]-c[i-1]; db av=1.0*(w)/L; ans=min(ans,1.0*(q-2*av*w+av*av*L)/L); } printf("%.3lf",ans); return 0; }
相关文章推荐
- Cocoa Pods 的使用
- python中的map、filter、reduce函数
- pool_allocator源码笔记
- 数据结构复习练手之nyoj5
- Scala学习笔记(二)--数组、列表、元祖和scala脚本编写及读取文件
- 通过opencv采集视屏,socket进行转发
- MongoDB水平分片集群学习笔记
- tomcat结合nginx使用小结
- scrollerview嵌套listview问题解决
- 一片空白
- python学习(2)- Python 简介
- MySQL索引原理及慢查询优化
- 图片的变换
- HDU 3232Crossing Rivers(数学期望)
- mysql分表的3种方法(转)
- 图片腐蚀效果
- 死锁:系统中有资源n个,现有k个进程互斥使用,每个进程最多使用m个资源
- SSH KEY免密码验证
- JSONObject json
- webstorm中使用git