• 库特摘果子——优先队列


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

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

     优先队列

    大根堆:从大到小排列。
    小根堆:从小到大排列。
    优先队列就是堆,也可以自己手写堆。
    // 小根堆的写法
    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(" ");
        }
    return 0;
    }
    这个题倒不难,主要是注意数据的类型。要定成long long型。否则会wa。

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

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

    成功不是偶然的,失败也不是必然的。
  • 相关阅读:
    Linux驱动之异常处理体系结构简析
    Linux驱动之按键驱动编写(查询方式)
    Linux驱动之LED驱动编写
    Linux驱动之建立一个hello模块
    Linux驱动之内核加载模块过程分析
    制作根文件系统之制作根文件系统步骤详解
    制作根文件系统之Busybox init进程的启动过程分析
    制作根文件系统之内核如何启动init进程
    制作根文件系统之内核挂接文件系统步骤分析
    Linux移植之tag参数列表解析过程分析
  • 原文地址:https://www.cnblogs.com/zhuyukun/p/12317050.html
Copyright © 2020-2023  润新知