牛客练习赛69 B

划分

https://ac.nowcoder.com/acm/contest/7329/B

分析

对于一个确定的 ,答案一定是可以取到前 个最大的值,所以只需要排序,再维护一个前缀和。最后时间复杂度为

代码

#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int N = 1e5 +10;
LL A[N],sum[N],n,X,Y,ans;
bool cmp(LL x,LL y) {return x > y;}
int main()
{
    scanf("%lld",&n);
    for(int i = 1;i <= n;i++) scanf("%lld",&A[i]);
    sort(A+1,A+1+n,cmp);
    scanf("%lld%lld",&X,&Y);
    for(int i = 1;i <= n;i++) sum[i] = sum[i-1] + A[i];
    for(int i = 1;i <= X;i++)
    {
        for(int j = 1;j <= Y;j++) {
            ans += sum[i*j];
        }
    }
    cout << ans << endl;
}
全部评论

相关推荐

努力学习的小绵羊:我反倒觉得这种挺好的,给不到我想要的就别浪费大家时间了
点赞 评论 收藏
分享
一颗宏心:华为HR晚上过了十二点后还给我法消息。
点赞 评论 收藏
分享
评论
7
4
分享
牛客网
牛客企业服务