• 「题解」:平均数


    问题 A: 平均数

    时间限制: 1 Sec  内存限制: 256 MB

    题面


    题面谢绝公开。

    题解


    第一眼看题目以为是水题。。

    赛时暴力数组开小40pts->0pts……

    正解二分答案+前缀和判逆序对check。

    二分平均值,check时将所有权值减去当前平均值再统计前缀和。

    此时前缀和出现逆序对即原数组在这一区间内的平均值小于当前mid。

    那么问题转化为判逆序对。

    又由于值域1e9,所以不能用树状数组求逆序对。采用经典的归并排序即可。

    代码:

    #include<bits/stdc++.h>
    #define int long long
    #define rint register int
    #define read(A) A=init()
    using namespace std;
    inline int init()
    {
        int a=0,b=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')b=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){a=(a<<3)+(a<<1)+ch-'0';ch=getchar();}
        return a*b;
    }
    int n,k,tot,a[100005];
    double sum[100005],g[100005];
    inline void Merge_sort(int L,int R)
    {
        int mid,l,r,k;
        if(L==R) return ;
        mid=(L+R)/2;
        Merge_sort(L,mid);
        Merge_sort(mid+1,R);
        l=L,r=mid+1,k=L; 
        while(l<=mid&&r<=R)    
        {
            if(sum[l]>sum[r])
                tot+=mid-l+1,g[k]=sum[r],k++,r++;
            else g[k]=sum[l],k++,l++;
        }
        while(l<=mid)g[k]=sum[l],l++,k++;
        while(r<=R)g[k]=sum[r],r++,k++;
        for(int u=L;u<=R;++u)sum[u]=g[u];
    }
    inline int check(double mid)
    {
        tot=0;
        sum[0]=0.0;
        for(rint i=1;i<=n;++i)
            sum[i]=sum[i-1]+(double)(a[i]-mid);
        Merge_sort(0,n);
        return tot;
    }
    main()
    {
        read(n),read(k);
        for(rint i=1;i<=n;++i) read(a[i]);
        double l=0,r=1e17;
        while(l<r-(1e-8))
        {
            double mid=(l+r)/2.0;
            if(check(mid)<k)l=mid;
            else r=mid;
        }
        printf("%.4lf
    ",l);
        return 0;
    }
    View Code
  • 相关阅读:
    Metropolis(大都会):以太坊网络的下一个阶段
    《区块链开发技术综述》乱弹
    Ext.Net学习笔记09:Ext.Net Store的用法
    Ext.Net学习笔记09:Ext.Net Store的用法
    Spring整合redis配置文件详解
    Spring整合redis配置文件详解
    Spring整合redis配置文件详解
    Spring整合redis配置文件详解
    Android环境配置----在Ubuntu上安装JDK
    Android环境配置----在Ubuntu上安装JDK
  • 原文地址:https://www.cnblogs.com/xingmi-weiyouni/p/11603707.html
Copyright © 2020-2023  润新知