NOIP提高组【JZOJ4809】挖金矿
2016-10-04 21:22
246 查看
Description
Data Constraint
Solution
这道题我们用二分答案就好。每次二分一个平均值,从1到n扫一下,选取一个总和比平均值个数大最多的数,若没有,则选择一个总和比平均值 个数相差最小的数即可。时间复杂度O(N*Hlog109)。
代码
#include<iostream> #include<cmath> #include<cstring> #include<cstdio> #include<algorithm> #define ll long long using namespace std; const int maxn=100005; ll a[maxn],n,m,i,t,j,k,num,p; double mid,l,r,b[maxn],c[maxn],sum,mx,x; bool bz; int main(){ // freopen("data.in","r",stdin); scanf("%d%d",&n,&m); for (i=1;i<=n;i++){ k=t+2; for (j=1;j<=m;j++) scanf("%lld",&a[++t]); c[k-1]=b[k-1]=a[k-1]; for (j=k;j<=t;j++) c[j]=b[j]=b[j-1]+a[j]; for (j=k-1;j<=t;j++) c[j]/=j-k+2; } l=0;r=10000000000; while (r-l>0.000001){ mid=(l+r+0.000001)/2;sum=0;num=0; for (i=1;i<=n;i++){ mx=1000000000*n*m; for (j=i*m;j>=(i-1)*m+1;j--) if ((mid-c[j])*(j-(i-1)*m)<mx) mx=(mid-c[j])*(j-(i-1)*m),p=j; sum+=b[p],num+=p-(i-1)*m; } x=sum/(num*1.0); if (x>=mid) l=mid; else r=mid-0.000001; } printf("%.4lf\n",l); }
相关文章推荐
- 【JZOJ4809】【NOIP2016提高A组五校联考1】挖金矿
- 【JZOJ 4809】【NOIP2016提高组 五校联考1】挖金矿
- JZOJ 4809 【NOIP2016提高A组五校联考1】挖金矿
- JZOJ5461. 【NOIP2017提高A组冲刺11.8】购物
- JZOJ 5186. 【NOIP2017提高组模拟6.30】tty's home
- 【JZOJ 4931】【NOIP2017提高组模拟12.24】A
- jzoj 4883. 【NOIP2016提高A组集训第12场11.10】灵知的太阳信仰
- 【JZOJ5287】【NOIP2017提高组模拟】最短路
- 【JZOJ5332】【NOIP2017提高A组模拟8.23】密码
- 【JZOJ4772】【NOIP2016提高A组模拟9.9】运输妹子
- {题解}[jzoj4787]【NOIP2016提高A组模拟9.17】数格子
- JZOJ 4786. 【NOIP2016提高A组模拟9.17】小a的强迫症
- NOIP提高组【JZOJ4813】running
- JZOJ 4814. 【NOIP2016提高A组五校联考2】tree
- JZOJ 5286. 【NOIP2017提高A组模拟8.16】花花的森林
- 【JZOJ 4813】【NOIP2016提高组 五校联考2】running
- JZOJ 4815 【NOIP2016提高A组五校联考4】ksum
- 【JZOJ4816】【NOIP2016提高A组五校联考4】label
- JZOJ 5379. 【NOIP2017提高A组模拟9.21】Victor爱数字