题解:P15026 [UOI 2021 II Stage] 商店

· · 题解

题面翻译

给你一个正整数 n 和一个长度为 n 的序列 a,你需要进行以下操作:

现在,你需要求出最大金额是多少。

思路

排序,然后枚举每个价格作为最低价格 k,计算满足条件的珠宝数量 m,从而得到收益 k \times m,并记录最大值。

注意:不开 long long 见祖宗。

时间复杂度 O(n \log n)

Code

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, a[100005], ans;
signed main(){
    cin >> n;
    for(int i = 1; i <= n; i++)cin >> a[i];
    sort(a + 1, a + n + 1);
    for(int i = 1; i <= n; i++){
        int k = a[i], m = n - i + 1;
        ans = max(ans, k * m);
    }
    cout << ans;
    return 0;
}

制作不易,可以留下一个关注喵!愿审核通过!