abc161D 第k个轮数

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

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

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,a,b) for(int i=a; i<=b; i++)
#define per(i,a,b) for(int i=b; i>=a; i--)

int k;
void solve() {
    cin >> k;
    priority_queue<int> q;
    rep(i,1,9) q.push(-i);
    while (!q.empty()) {
        int t = -q.top(); q.pop();
        k -= 1;
        if (k == 0) {
            cout << t << "\n";
            return;
        }
        int d = t % 10;
        rep(i,-1,1) {
            if (0 <= d+i && d+i <= 9) {
                int z = t * 10 + d + i;
                q.push(-z);
            }
        }
    }
}

signed main() {
    cin.tie(0)->sync_with_stdio(0);
    int t = 1;
    while (t--) solve();
    return 0;
}
posted @ 2024-03-09 20:43  chenfy27  阅读(3)  评论(0编辑  收藏  举报