码迷,mamicode.com
首页 > 其他好文 > 详细

库特摘果子——优先队列

时间:2020-02-16 16:09:34      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:show   ref   target   cto   优先队列   ace   std   str   命名   

技术图片

 

 这个用优先队列就可以了。

在这里补充一点优先队列和队列的知识。

 优先队列

大根堆:从大到小排列。
小根堆:从小到大排列。
优先队列就是堆,也可以自己手写堆。
// 小根堆的写法
priority_queue<int,vector<int>,greater<int> > vis;
// 大根堆的写法
priority_queue<int,vector<int>,less<int> > vis;

(注意要和sort的写法分开,正好和sort相反。)

也可以用结构体。

定义一个priority_queue 的方法为:
priority_queue<type> name;//type 通常为结构体

举个例子:

struct sa
{
    int num;
    int time;
};
bool operator<(const sa &a,const sa &b)//固定格式,a和b自己命名就行了。这个为判断优先队列咋排序。
{
    return a.sum<b.sum;//表示的是从大到小
}
priority_queue<sa>vis;//sa为数据类型,vis为优先队列的名字,可以随便起。

vis.push()//从队尾入队列
vis.pop()//从队首出队列
vis.top()//队首
vis.empty()//判断队列是否为空
vis.size()//判断队列中元素的数量

队列

 队列的基本操作:
(1)初始化队列 queue<int>vis ,定义一个队列
(2)入队 vis.push(x)
(3)出队 vis.pop()
(4)判断队列是否为空 vis.empty()
(5)判断队列中元素的数量vis.size()
(6)得到队列的队首元素 vis.front()
综上: #include <queue>
用<bits/stdc++.h>则无需考虑头文件。

————————————————————————————————————————

接下来我们看上面这道题吧

#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
 long long   a[N];
int main()
{
    int  n,x,l;
    while(~scanf("%d",&n))
    {
       l=0;
        priority_queue<long long,vector<long long>,greater<long long> >vis;
        for(int i=1;i<=n;i++)
        {
            cin>>x;
            vis.push(x);
        }
        for(int i=1;i<n;i++)
        {
            long long s1=vis.top();
            vis.pop();
            long long  s2=vis.top();
            vis.pop();
            a[++l]=s1+s2;
            vis.push(s1+s2);
        }
        printf("%lld",a[1]);
        for(int i=2;i<=l;i++)
            printf(" %lld",a[i]);
            printf("\n");
    }
return 0;
}
这个题倒不难,主要是注意数据的类型。要定成long long型。否则会wa。

提供个链接,可以做一下。

http://acm.nefu.edu.cn/problemShow.php?problem_id=2110

 

库特摘果子——优先队列

标签:show   ref   target   cto   优先队列   ace   std   str   命名   

原文地址:https://www.cnblogs.com/zhuyukun/p/12317050.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!