Hướng dẫn giải của TS10 Khánh Hòa 2023 - Phần thưởng

Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người làm lời giải.


Nộp code mẫu trước khi tự giải được bài tập là một hành vi có thể bị ban.

Gợi ý

  • Vì giá trị của phần thưởng sẽ dựa trên điểm của người có điểm thấp nhất được phát thưởng nên khi chọn ta cần chọn những người có điếm cao để phát thưởng.
  • Ta sắp xếp lại ~m~ công nhân theo giá trị điểm. Vì ~m, n \le 10^5~ nên ta có thể xác định được ~i~ người có điểm cao nhất rồi tính tổng giá trị của ~i~ phần thưởng là ~ans_i~. Đáp án là giá trị lớn nhất của mảng ~ans~.

Code tham khảo

#include <bits/stdc++.h>

using namespace std;
const int N = 1e5 + 5;
int n, m, ans = 0;
int a[N];
int main() {
    freopen("PRIZE.INP","r",stdin);
    freopen("PRIZE.OUT","w",stdout);
    cin >> m >> n;
    for(int i = 1; i <= n; i++) cin >> a[i];

    sort(a+1, a+1+m);
    reverse(a+1, a+1+m);
    for(int i = 1; i <= min(m, n); i++)  ans = max(ans, a[i]*i);
    cout << ans;
    return 0;
}

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.