zoukankan      html  css  js  c++  java
  • 洛谷 P2717 寒假作业

    https://www.luogu.org/problemnew/show/P2717

    $n le 1004枚举区间,挨个计算,判断,时间复杂度$O(n^3)$。

    $n le 5000$,预处理出一个前缀和,然后枚举区间,时间复杂度$O(n^2)$

    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <cmath>
    #include <queue>
    using namespace std;
    #define LL long long
    LL a[100006],sum[100006],ans,k;
    int n;
    int main()
    {
        scanf("%d%lld",&n,&k);
        for(int i=1;i<=n;i++)
        {
            scanf("%lld",&a[i]);
            sum[i]=sum[i-1]+a[i];
        }
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=i;j++)
            {
                if((sum[i]-sum[j-1])/(i-j+1)>=k)ans++;
            }
        }
        printf("%lld",ans);
    }
    50分代码

    对于100%的数据的话,我们首先计算平均值k嘛,我们把整个序列减去k,然后我们想,如果一段区间的和为整数那么这段区间的平均值就大于0,枚举区间是不可能了,但是前缀和依旧是个好东西啊,我们统计一下前缀和(减去k了哦),当这一段区间$[i,j]$的和大于0时那么$sum[j]>sum[i]$,所以我们要求的就是有多少对$(i,j)$,$i < j并且sum[i]<sum[j]$看到这里我们发现他和求逆序对很相似,对不对?然后只需要在合并的时候稍微修改一下就好了。

    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <cmath>
    #include <map>
    using namespace std;
    #define LL long long
    int n,k,a[100006],sum[100006],tmp[100006];
    LL ans;
    void merge(int l,int mid,int r)
    {
        int i=l,j=mid+1,k=l;
        while(i<=mid&&j<=r)
        {
            if(sum[i]<=sum[j])
            {
                ans+=r-j+1;
                tmp[k++]=sum[i++];
            }
            else tmp[k++]=sum[j++];
        }
        while(i<=mid)tmp[k++]=sum[i++];
        while(j<=r)tmp[k++]=sum[j++];
        for(i=l;i<=r;i++)sum[i]=tmp[i];
    }
    void merge_sort(int l,int r)
    {
        int mid=(l+r)/2;
        if(l<r)
        {
            merge_sort(l,mid);
            merge_sort(mid+1,r);
            merge(l,mid,r);
        }
    }
    int main()
    {
        scanf("%d%d",&n,&k);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            sum[i]=sum[i-1]+a[i]-k;
        }
        merge_sort(0,n);
        printf("%lld",ans);
    }
  • 相关阅读:
    pat 1044 Shopping in Mars
    PAT1017 Queueing at Bank
    PAT1023 Have Fun with Numbers
    PAT1020
    谈谈软件测试职业规划
    测试工程师的一些思考
    浅谈性能测试
    软件测试价值提升之路- 第三章"拦截缺陷 "读书笔记
    软件测试价值提升之路- 第二章"价值实现的起点"读书笔记
    UI 自动化框架设想
  • 原文地址:https://www.cnblogs.com/rmy020718/p/9735959.html
Copyright © 2011-2022 走看看