题意:
现给定 ,求出所有 中第 小的。
预处理打表。
预处理可以使用类似于
的方法实现。如果当前出队的数大于某个较大值时停止。实测“较大值”取
时,共可以得到
个数以上,根据
的数据范围,可以符合要求。
AC代码:
vector<ll> ans;
ll Q[10000005];
int l = 1, r = 0;
void init()
{
rep(i, 1, 9)
Q[++r] = i;
while (r > l)
{
ll cur = Q[l++];
if (cur > 1e11)
return;
ans.pb(cur);
int back = cur % 10;
Q[++r] = cur * 10ll + back;
if (back != 0)
Q[++r] = cur * 10ll + back - 1;
if (back != 9)
Q[++r] = cur * 10ll + back + 1;
}
}
int main()
{
init();
int k;
sd(k);
sort(ans.begin(), ans.end());
pld(ans[k - 1]);
return 0;
}