PKU 2545 Hamming Problem

http://poj.org/problem?id=2545
素因数分解したとき、因数にp1,p2,p3しか持たない数のうち、h番目の数字を出力するというような問題。

小さい方から列挙していくだけで大丈夫のよう。

main(){
  int p1,p2,p3,h;
  cin>>p1>>p2>>p3>>h;
  set<ll> app;
  priority_queue<ll> q;
  q.push(-1);
  while(!q.empty()){
    ll c=-q.top();q.pop();
    if(app.count(c))continue;
    app.insert(c);
    if(SZ(app)==h+1){
      cout<<c<<endl;
      return 0;
    }
    if(c<c*p1)q.push(-c*p1);
    if(c<c*p2)q.push(-c*p2);
    if(c<c*p3)q.push(-c*p3);
  }
}