UVa136 Ugly Numbers (STL)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa136 Ugly Numbers (STL)相关的知识,希望对你有一定的参考价值。
链接:http://acm.hust.edu.cn/vjudge/problem/19437
分析:priority_queue的应用。丑数指不能被2,3,5以外的其它素数整除的数,最小的丑数是1(1不是素数),然后对于每个丑数x,2x,3x,5x也是丑数,所以就从小到大生成每个丑数保存在优先队列里,每次取队列中最小的丑数扩展,注意生成新的丑数时还需判断之前是否已经生成过,这里用set就可以保存生成过的所有丑数。
1 #include <iostream> 2 #include <queue> 3 #include <set> 4 #include <vector> 5 using namespace std; 6 7 typedef long long LL; 8 const int coeff[3] = {2, 3, 5}; 9 10 int main() { 11 priority_queue<int, vector<LL>, greater<LL> > pq; 12 set<LL> s; 13 pq.push(1); 14 s.insert(1); 15 for (int i = 1; ; i++) { 16 LL x = pq.top(); pq.pop(); 17 if (i == 1500) { 18 cout << "The 1500‘th ugly number is " << x << ".\n"; 19 break; 20 } 21 for (int j = 0; j < 3; j++) { 22 LL x2 = x * coeff[j]; 23 if (!s.count(x2)) { s.insert(x2); pq.push(x2); } 24 } 25 } 26 return 0; 27 }
以上是关于UVa136 Ugly Numbers (STL)的主要内容,如果未能解决你的问题,请参考以下文章