1 条题解

  • 0
    @ 2023-1-7 16:20:34
    #include <bits/stdc++.h>
    #define int long long
    using namespace std;
    int n;
    int a[30000];
    priority_queue<int> q;
    signed main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        // work
        for (int i = 1; i <= n; i++)
            q.push(-a[i]); // 通过传相反数,实现最小值模式的优先队列
        int ans = 0;       // 消耗的总体力
        while (q.size() != 1)
        {
            // 取出来当前大小最小的两堆果子
            int x = -q.top();
            q.pop();
            int y = -q.top();
            q.pop();
            // 计算体力消耗
            ans += (x + y);
            // 把合并好的一堆果子放回队列
            q.push(-(x + y));
        }
        cout << ans << "\n";
        return 0;
    }
    
    • 1

    信息

    ID
    588
    时间
    1000ms
    内存
    128MiB
    难度
    5
    标签
    (无)
    递交数
    77
    已通过
    29
    上传者