【JZOJ4585】Robert 的军队
来源:互联网 发布:视频监控软件破解版 编辑:程序博客网 时间:2024/06/11 09:54
Description
Solution
一开始以为这题是什么二分,数据结构之类的,结果推不出来。
后来推了大半天,才发现了用平方和和平均数来快速求方差,但是只把
没办法水了水,打了一个分段贪心,因为在对拍的时候发现选的数都只有l个。然后就变为
注意
这道题每个数的范围开的有点大,平方和会爆0x7fffffff(maxlongint),所以ans要开大一点。
注意c++的运算规律
比如说a=b*c,b*c会爆int,那么b和c都必须要开long long,除法类似。
Code
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=100007;long long i,j,k,l,t,n,m,r;double ans,ave,pp;long long a[maxn];double sum[maxn],ans2;double ping[maxn];bool cmp(long long x,long long y){return x<y;}int main(){ freopen("army.in","r",stdin); freopen("army.out","w",stdout); scanf("%lld%lld%lld",&n,&l,&r); fo(i,1,n)scanf("%lld",&a[i]); sort(a+1,a+1+n,cmp); fo(i,1,n)ping[i]=a[i]*a[i]+ping[i-1],sum[i]+=sum[i-1]+a[i];ans=1000000000000000000; if(n<=2000){ fo(i,1,n){ fo(j,l,r){ k=i+j-1;if(k>n)break; ave=sum[k]-sum[i-1];ave=ave/j; pp=ping[k]-ping[i-1];pp=pp/j-ave*ave; if(pp<ans){ ans=pp; } } } } else{ fo(i,1,n){ k=i+l-1;if(k>n)break; ave=sum[k]-sum[i-1];ave=ave/l; pp=ping[k]-ping[i-1];pp=pp/l-ave*ave; if(pp<ans){ ans=pp; } } } printf("%.3f\n",ans);}
1 0
- 【JZOJ4585】Robert 的军队
- 【jzoj4585】【Robert 的军队】
- [jzoj4585]【NOIP2016模拟7.7】Robert 的军队
- Robert 的军队
- Robert 的军队
- Robert 的军队
- Robert 的军队
- Robert 的军队 题解+代码
- 【JZOJ 4585】Robert 的军队
- 【JZOJ 4585】Robert 的军队
- 军队的级别与军队编制
- 越南军队的战斗力
- 这样的军队谁能敌?
- 最可怕的军队
- X国的军队
- Robert算子的运用
- 不同时代军队的战争
- 军队问题--线性链表的操作
- 一个简单的文件读写实例
- inline内联函数详解
- Party
- Implement Queue using Stacks
- AuthorizeAttribute认证失败Redirect后依旧会进入Action
- 【JZOJ4585】Robert 的军队
- [Codeforces232D]Fence
- RHEL7修改网卡命名规则为eth*
- vs2015 配置boost
- 多态笔记
- APP开发流程实例讲解-儒释道网络电台八天开发全程-界面美化并进一步优化排错
- C语言运算符优先级 之 快速记忆
- 【JZOJ4587】Snow的追寻
- js中nodeName nodeType nodeValue的用法和区别