• 优先队列(张磊大佬分享的)


    看了半天的优先队列没看懂

    还是找了下大佬整理的资料看着

    代码很简单,所以就不解释了,等找到优先队列的题目再来更新吧

    #include<iostream>
    #include<cstdio>
    #include<functional>
    #include<queue>
    #include<vector>
    using namespace std;
    
    struct cmp1{
        bool operator () (int &a,int &b){
            return a>b; //最小值优先
        }
    };
    
    struct cmp2{
         bool operator () (int &a,int &b){
             return a<b; //最大值优先
         }
    };
    
    //定义结构,使用运算符重载,自定义优先级2
    
    struct number1{
        int x;
        bool operator < (const number1 &a) const{
            return x<a.x; //最大值优先
        }
    };
    
    struct number2{
        int x;
        bool operator < (const number2 &a) const {
            return x>a.x; //最小值优先
        }
    };
    
    int main()
    {
        priority_queue<int>que; //采用默认优先级构造队列
    
        priority_queue<int,vector<int>,cmp1>que1; //最小值优先
    
        priority_queue<int,vector<int>,cmp2>que2; //最大值优先
    
        priority_queue<int,vector<int>,greater<int> >que3; //最小值优先
    
        priority_queue<int,vector<int>,less<int> >que4; //最大值优先
    
        priority_queue<num1>que5;
    
        priority_queue<num2>que6;
    
        que1.empty(); //判断一个队列是否为空
    
        que1.pop(); //删除队顶元素
    
        que1.push(); //加入一个元素压入栈顶
    
        que1.size(); //返回优先队列中拥有的元素个数
    
        que1.top(); //返回优先队列的队顶元素(不删除)
    
        //时间复杂度为O(logn) n为队列中元素的个数
    }

    push(x) 将x压入队列的末端

    pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值

    front() 返回第一个元素(队顶元素)

    back() 返回最后被压入的元素(队尾元素)

    empty() 当队列为空时,返回true

    size() 返回队列的长度

    补题了 :

    在紫书上找到一到优先队列的题  p120   UVA136

    //丑数是指不能被2,3,5以外的其它素数整除的数,把丑数从小到达排列起来,结果如下:
    //     1,2,3,4,5,6,8,9,10,12……
    //    求第1500个丑数?
    #include<iostream>
    #include<vector>
    #include<queue>
    #include<set>
    using namespace std;
    typedef long long ll;
    const int coeff[3]={2,3,5};
    int main()
    {
        priority_queue<ll,vector<ll>,greater<ll> >gg;//优先队列定义
        set<ll>s;
        gg.push(1);
        s.insert(1);
        for(int i=1; ;i++)
        {
            ll x=gg.top();
            gg.pop();
            if(i==1500)
            {
                cout<<"The 1500'th ugly number is "<<x<<".
    ";
                break;
            }
            for(int j=0;j<3;j++)
            {
                ll x2=x*coeff[j];
    
            if(!s.count(x2)){
                s.insert(x2);
                gg.push(x2);
            }
            }
        }
        return 0;
    }
  • 相关阅读:
    【(高职专科组)第十一届蓝桥杯省模拟赛答案】给定一个数列,请问找出元素之间最大的元素距离。
    【(高职专科组)第十一届蓝桥杯省模拟赛答案】给定一个数列,请问数列中最长的递增序列有多长。
    POJ 2391 二分+最大流
    HDU 4529 状压dp
    NYOJ 747贪心+dp
    NYOJ 745 dp
    HDU 2686 / NYOJ 61 DP
    HDU 4313树形DP
    HDU 4303 树形DP
    POJ 2342 树形DP
  • 原文地址:https://www.cnblogs.com/huangzzz/p/7795204.html
Copyright © 2020-2023  润新知