Robert 的军队
来源:互联网 发布:深圳盘古数据上市了没 编辑:程序博客网 时间:2024/05/17 02:11
Description
给出n个数,你可以从中选出x个数,l<=x<=r,使得这x个数的方差最小。求这个方差。
n<=10^5
Solution
看到这道题,首先是懵逼,方差最小?波动最小?
那么肯定是排序之后选连续的一段。
既然是连续的一段,那么我们就可以O(1)算出方差。
然后化简之后就是
于是区间[i,j]的方差就是
然后,你可以打一个表,或者感性的理解一下,这样选择的话,选多的一定不比选少的优。
于是我们只用选l个数。(感性理解一下)
O(n)扫一遍就好了。
Code
#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define N 100005using namespace std;typedef double db;typedef long long ll;db sqr[N],sum[N],ans;int a[N],n,l,r;int main() { freopen("army.in","r",stdin); freopen("army.out","w",stdout); scanf("%d%d%d",&n,&l,&r); fo(i,1,n) scanf("%d",&a[i]); sort(a+1,a+n+1);ans=1000000000000000000; fo(i,1,n) sum[i]=sum[i-1]+a[i]; fo(i,1,n) sqr[i]=sqr[i-1]+(ll)a[i]*a[i]; if (n<=2000) { fo(i,l,r) fo(j,i,n) { db s=(sum[j]-sum[j-i])*1.0/i; s*=s;s=(sqr[j]-sqr[j-i])*1.0/i-s; ans=min(ans,s); } printf("%.3lf",ans); return 0; } fo(i,l,n) { db s=(sum[i]-sum[i-l])*1.0/l; s*=s;s=(sqr[i]-sqr[i-l])*1.0/l-s; ans=min(ans,s); } printf("%.3lf",ans);}
0 0
- Robert 的军队
- 【JZOJ4585】Robert 的军队
- Robert 的军队
- 【jzoj4585】【Robert 的军队】
- Robert 的军队
- Robert 的军队
- Robert 的军队 题解+代码
- 【JZOJ 4585】Robert 的军队
- 【JZOJ 4585】Robert 的军队
- [jzoj4585]【NOIP2016模拟7.7】Robert 的军队
- 军队的级别与军队编制
- 越南军队的战斗力
- 这样的军队谁能敌?
- 最可怕的军队
- X国的军队
- Robert算子的运用
- 不同时代军队的战争
- 军队问题--线性链表的操作
- 基于DotSpatial实现面积测量图层
- JAVA自学之每日一题(七)
- 欢迎使用CSDN-markdown编辑器
- Android GPS坐标距离计算
- 235. Lowest Common Ancestor of a Binary Search Tree
- Robert 的军队
- 一个简易的视屏播放器
- CSS3 涟漪效果
- HDU 3232Crossing Rivers(数学期望)
- Mybatis配置报错元素类型为 "configuration" 的内容必须匹配 "(properties?,settings?,typeAliases?,typeHandlers?,objectF
- centos安装php扩展imagick-高性能处理图片
- python 接受远程数据并写入数据库的相关模块
- 关于服务器的深入补充
- 边缘检测算法及图像金字塔