zoukankan      html  css  js  c++  java
  • 「题解」:平均数

    问题 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
  • 相关阅读:
    vector详解
    浅谈 莫斯电码&栅栏密码
    牛牛的BRD迷宫2 构造+思维
    Codeforces Round #409 C. Voltage Keepsake(二分+思维)
    hdu 2609 How many(最小表示法)
    hdu 4513(Manacher)
    codeforces 486 E. LIS of Sequence(dp)
    codeforces 486 D. Valid Sets(树形dp)
    hdu3746(kmp最小循环节)
    poj 2406 Power Strings(kmp next的应用)
  • 原文地址:https://www.cnblogs.com/xingmi-weiyouni/p/11603707.html
Copyright © 2011-2022 走看看