洛谷1090 优先队列 priority_queue

洛谷P1090 传送门

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

合并果子

第一次,我很**的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;
}

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hesorchen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值