牛客ZJ27题目描述
给定整数n和m, 将1到n的这n个整数按字典序排列之后, 求其中的第m个数。
对于n=11, m=4, 按字典序排列依次为1, 10, 11, 2, 3, 4, 5, 6, 7, 8, 9, 因此第4个数是2.
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
long n, m;
cin >> n >> m;
long i = 1;
m--;
while (m != 0)
{
long num = 0;
long start = i, end = i + 1;
while (start <= n)
{
num += min(n + 1, end) - start;
start *= 10;
end *= 10;
}
if (num > m)
{
i *= 10;
m--;
} else {
m -= num;
i++;
}
}
cout << i << endl;
return 0;
}
太变态了吧,看不懂啊