【第22期】观点:IT 行业加班,到底有没有价值?

例题5-7 UVa136 Ugly Numbers(STL:priority_queue)

原创 2016年08月28日 16:57:00

题意:

看白书

要点:

很简单的priority_queue应用题。之所以写个博客是为了总结一下priority_queue的写法。主要问题是VS中greater不是模板,但OJ中可以AC。

需要特殊排序可以有以下两种写法:

struct node
{
	int x, y;
};
struct cmp
{
	bool operator()(node a, node b)
	{
		return a.x > b.x;//注意这里是优先度的意思,如果想从小到大输出要>
	}
};
priority_queue<node, vector<node>, cmp > p;

或者:

struct node
{
	int x, y;
	friend bool operator<(node a, node b)
	{
		return a.x < b.x;//这里直接重载了<,所以优先度就是从小到大的
	}
};
priority_queue<node> pq;

下面是UVa136的代码:

#include<iostream>
#include<set>
#include<queue>
#include<vector>
using namespace std;
typedef long long LL;
const int coff[3] = { 2,3,5 };

struct cmp//升序排列
{
	bool operator()(LL &a, LL &b)//仿函数
	{
		return a > b;
	}
};

int main()
{
	//priority_queue<LL, vector<LL>, greater<LL> > pq;
	priority_queue<LL, vector<LL>, cmp > pq;//VS2015中greater不行但OJ中可以AC
	set<LL> s;
	pq.push(1);
	s.insert(1);
	for (int i = 1;; i++)
	{
		LL x = pq.top();
		pq.pop();
		if (i == 1500)
		{
			printf("The 1500'th ugly number is %lld.\n", x);
			break;
		}
		else
		{
			for (int i = 0; i < 3; i++)
			{
				LL temp = x*coff[i];
				if (!s.count(temp))
				{
					s.insert(temp);
					pq.push(temp);
				}
			}
		}
	}
	return 0;
}




版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Ugly Numbers UVA 136 priority_queue+set

题目链接  Ugly Numbers  Ugly numbers are numbers whose only prime factors are 2, 3 or 5. ...

stl container: deque | priority_queue | map | vector

deque:全称double-endedqueue,双端队列 适合栈和队列的操作,不过同样支持<s

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

例题5-7 UVA 136 Ugly Numbers丑数(set+优先队列)

这里综合运用了Set 和 优先队列: 整体思路: 凡是2,3,5的倍数的都是丑数,所以可以开一个优先队列(整数越小,优先级越高),先插入1,在插入用1乘以2,3,5得到2,3,5的倍数,然后把优先...

stl priority_queue

简单的使用示例。 view plaincopy to clipboardprint? #include "stdafx.h"//非vc编译器可去掉 #include #include #include using namespace ...

STL之priority_queue源码剖析

STL之priority_queue源码剖析 heap 在探讨priority_queue之前,我们必须先分析heap。heap并不归属于STL容器,他是个幕后英雄,扮演priorityqueue的助手。顾名思义,priority queue允许用户以任何次序将任何元素推入容器,但取出时一定是从...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)