Hướng dẫn giải của Hóa học

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.

Tác giả: kieuphat159

  • Để số lọ trống là lớn nhất thì ta ưu tiên đổ vào các lọ có dung tích lớn nhất.

Code tham khảo

#include <bis/stdc++.h>
using namespace std;

typedef pair<int, pair<int, int>> iii;
int n, ans[100005];
long long sum = 0;
iii a[100005];

bool cmp(iii &x, iii &y){
    return x.second.first > y.second.first;
}

int main()
{
    cin >> n;
    for(int i = 0; i <= n; i++)
    {
        cin >> a[i].first >> a[i].second.first;
        a[i].second.second = i;
        sum += a[i].first;
    }
    sort(a + 1, a + 1 + n, cmp);
    for (iii x:a)
    {
        if (sum > x.second.first){
            sum -= x.second.first;
            ans[x.second.second] = x.second.first;
        }
        else{
            ans[x.second.second] = sum;
            break;
        }
    }
    int cnt = 0;
    for(int i = 1; i <= n; i++) if (ans[i] == 0) cnt++;
    cout<< cnt << '\n';
    for(int i = 1; i <= n; i++) cout << ans[i] << ' ';
    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.