PKU 1338 Ugly Numbers

  • 最短経路問題として解いた
  • 各ノードを数字、各エッジをx2,x3,x5に対応させる
  • 小さな数字から順に展開していく
int main() {
	set<ll> q;
	q.insert(1);
	vector<int> answer;
	while (answer.size() < 1500) {
		const ll value = *q.begin();
		q.erase(q.begin());
		answer.push_back(value);

		q.insert(value * 2);
		q.insert(value * 3);
		q.insert(value * 5);
	}

	for (int n; cin >> n && n; ) {
		cout << answer[n - 1] << endl;
	}
}