abc161D 第k个轮数

54 阅读1分钟

题面:一个正整数,如果其10进制表示中相邻各位数之差的绝对值不超过1,则称为轮数。求第k小的轮数。

范围:1 <= k <= 1E5

思路:数据范围较小,直接bfs。

#include <bits/stdc++.h>
using i64 = long long;
void solve() {
    int k;
    std::cin >> k;
    std::priority_queue<i64> q;
    for (int i = 1; i <= 9; i++) {
        q.push(-i);
    }
    while (!q.empty()) {
        i64 t = -q.top();
        q.pop();
        k -= 1;
        if (k == 0) {
            std::cout << t << "\n";
            return;
        }
        i64 d = t % 10;
        for (int i = -1; i <= 1; i++) {
            if (0 <= d + i && d + i <= 9) {
                i64 z = t * 10 + d + i;
                q.push(-z);
            }
        }
    }
}
int main() {
    std::cin.tie(0)->sync_with_stdio(0);
    int t = 1;
    while (t--) solve();
    return 0;
}

标签:bfs