是个以前没见过的模板题。。
我用比较复杂度方式过掉了。。
构造一个十叉树(有点trie的味道)来存数字,然后字典序就是先序遍历的结果
#include<bits/stdc++.h>
using namespace std;
#define maxn 1000005
int size[maxn],k,n,th,ans,flag;
void dfs(int i){
if(flag)return;
size[i]=;
th++;
if(th==k)ans=i,flag=; //cout<<i<<endl;
if(i==){
for(int j=;j<=;j++)
if(j<=n)dfs(j);
}
else {
for(int j=;j<=;j++){
int tmp=i*+j;
if(tmp<=n){
dfs(tmp);
size[i]+=size[tmp];
}
else return;
}
}
}
int main(){
int t;
cin>>t;
while(t--){
th=-;flag=;
scanf("%d%d",&n,&k);
dfs();
cout<<ans<<endl;
}
}