您好,欢迎来到客趣旅游网。
搜索
您的当前位置:首页洛谷1090 优先队列 priority_queue

洛谷1090 优先队列 priority_queue

来源:客趣旅游网

这两天没刷题忙着上王者,晚上洗完澡准备去切洛谷,然后刚刷一题就被卡住了。先上题(上面有原题链接):

第一次,我很**的sort之后直接加,然后只过了样例。。。
第二次,我(明知会TLE)每次sort然后加上最小的两个数,然后TLE 50%
然后看了一下题解,第一篇是 堆?,然后又看了第二篇,发现是很简单的优先队列。(原来洛谷每道题都有标签。。)

ps:优先队列之前看过好几次,不过还没具体用过,总之应该就是压入元素的时候会自动排序

然后自己很快也写好了

int main()
{
    priority_queue<ll> p;
    int n;
    cin >> n;
    ll ans = 0;
    while (n--)
    {
        ll a;
        cin >> a;
        p.push(a);
    }
    while (p.size() >= 2)
    {
        ll temp = 0;
        ll a;
        a = p.top();
        ans += a;
        temp += a;
        p.pop();
        a = p.top();
        ans += a;
        temp += a;
        p.pop();
        p.push(temp);
    }
    cout << ans << endl;
    return 0;
}
不过写完之后才发现优先队列默认是降序排序的,而这题需要升序排序。。。。然后又去看了一下题解,好像是需要重载运算符由于今天太晚了所以就只好(被迫)Ctrl+C+V了。

int main()
{
    priority_queue<ll, vector<ll>, greater<ll> > p;
    //Ctrl CV(逃~
    
    // priority_queue<ll> p;    //我第一次写的
    int n;
    cin >> n;
    ll ans = 0;
    while (n--)
    {
        ll a;
        cin >> a;
        p.push(a);
    }
    while (p.size() >= 2)
    {
        ll temp = 0;
        ll a;
        a = p.top();
        ans += a;
        temp += a;
        p.pop();
        a = p.top();
        ans += a;
        temp += a;
        p.pop();
        p.push(temp);
    }
    cout << ans << endl;
    return 0;
}

另外,今天上王者了,明天应该能刷点洛谷(小声

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- kqyc.cn 版权所有 赣ICP备2024042808号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务