Uva136 Ugly Numbers(優先佇列priority_queue的使用 大白例題5-7)
阿新 • • 發佈:2018-11-19
題意:醜數是指不能被2,3,5以外的其他素數整除的數,求第1500個醜數
解題思路:從小到大生成各個醜數,對於任意醜數x,2x,3x,5x也是醜數,這樣就可以用一個優先佇列儲存suo'y所有已生成的醜數,每次取出最小的醜數生成3個新的醜數。唯一需要注意的是當前的生成的醜數有沒有生成過。
AC程式碼:
#include<stdio.h> #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> > pq; set<ll> s; pq.push(1); s.insert(1); for(int i=1;;i++) { ll x=pq.top(); pq.pop(); if(i==1500) { cout<<"The 1500'th ugly number is "<<x<<".\n"; break; } for(int j=0;j<3;j++) { ll tx=x*coeff[j]; if(s.count(tx)==0) { pq.push(tx); s.insert(tx); } } } return 0; }