您的位置:首页 > 其它

[jzoj4585]【NOIP2016模拟7.7】Robert 的军队

2017-07-04 21:13 246 查看
还是打算跟随老前辈的脚步 一条路走到黑啊

传送

Solution

方差啊……初二数学呢

相信都会随手化简

S2=∑ai2−(∑ai)2nn

那么我们发现 这是可以 O(1) 的东西

根据方差的定义 我们选取“稳定”的数据

显然 排序后的连续子序列一定是最优

另外 可以感性的理解到 一个“稳定”的序列会更加“短小”

提示:序列是有序的

Code

C++的溢出真的很诡异

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define oo 2139062143
#define sqr(x) ((x)*(x))
#define lowbit(x) ((x)&(-x))
#define abs(x) (((x)>=0)?(x):(-(x)))
#define max(x,y) (((x)>(y))?(x):(y))
#define min(x,y) (((x)<(y))?(x):(y))
#define fo(i,x,y) for (int i = (x);i <= (y);++ i)
#define fd(i,x,y) for (int i = (x);i >= (y);-- i)
using namespace std;
typedef double db;
typedef long long ll;
const int N = 100100;
int n,l,r;
ll h
;
db sq
,s
;
db query(int l,int r)
{
db ss = (s[r] - s[l - 1]) * 1.0 / (r - l + 1);
ss *= ss;
ss = (sq[r] - sq[l - 1]) * 1.0 / (r - l + 1) - ss;
return ss;
//return abs((db)((db)((db)((db)(db)(sq[r] - sq[l - 1]) - (db)(sqr(s[r] - s[l - 1]) / (db)(r - l + 1))) / (db)(r - l + 1))));
}
int main()
{
freopen("army.in","r",stdin);
freopen("army.out","w",stdout);
scanf("%d%d%d", &n, &l, &r);
sq[0] = s[0] = 0;
fo(i,1,n) scanf("%lld", &h[i]);sort(h + 1,h + 1 + n);
fo(i,1,n) sq[i] = sq[i - 1] + sqr(h[i]),s[i] = s[i - 1] + h[i];
db ans = 1e30;
fo(i,1,n - l + 1)
ans = min(ans,query(i,i + l - 1));
printf("%.3lf", ans);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: