1 条题解

  • 0
    @ 2024-10-29 10:28:12

    解析:若想结果最大,优先选小的计算,若想结果最小,优先选大的计算; 使用优先队列存储数;

    #include <bits/stdc++.h>
    using namespace std;
    int n;
    priority_queue <int> qd;//大根堆
    priority_queue <int,vector<int>,greater<int>> qx;//小根堆
    int main() {
        cin>>n;
        for(int i=1;i<=n;i++){
            int x;
            cin>>x;
            qd.push(x);
            qx.push(x);
        }
        int mi,mx;
        for(int i=1;i<n;i++){
            //大根堆
            mx=qd.top();//取最大值
            qd.pop();//弹出最大值
            mx*=qd.top();//乘以次大值
            mx++;//加1
            qd.pop();//弹出次大值
            qd.push(mx);//压入计算结果
            //小根堆
            mi=qx.top();//取出最小值
            qx.pop();//弹出最小值
            mi*=qx.top();//乘以次小值
            mi++;//加1
            qx.pop();//弹出次小值
            qx.push(mi);//压入结果
        }
        cout<<qx.top()-qd.top();//输出极差
        return 0;
    }
    • 1

    信息

    ID
    611
    时间
    1000ms
    内存
    512MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者