给你一个数n和k
让你把1-----n字典序排列
求出第k个
t<100
n<1000000
题解:
首先我们可以通过n的字典序排序构造出一个10叉树
copy来自其他blog的图片
我们可以根据这个树 进行遍历
遍历有3种操作 *10 /10 +1
用dfs左序遍历也可以过 数据小
AC_code:
/*
Algorithm: 模拟 10叉树
Author: anthony1314
Creat Time:
Time Complexity:
*/
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#include<stack>
#include<cstring>
#include<cstdio>
//#include<bits/stdc++.h>
#define ll long long
#define maxn 1005
#define mod 1e9 + 7
#define line printf("--------------");
using namespace std;
int main() {
int t;
cin >> t;
while(t--) {
int n, k;
cin >> n >> k;
int temp = 1;
while(k > 1) {
if(temp * 10 <= n) { ////// 乘以10
temp *= 10;
k--;
} else {
if(temp + 1 <= n) {//////// 加1
while(temp % 10 == 9) {
temp /= 10;
}
temp++;
k--;
} else {/////// 除以10
temp /= 10;
while(temp % 10 == 9) {
temp /= 10;
}
temp++;
k--;
}
}
}
cout <<temp<< endl;
}
return 0;
}