(排序) $O(n)$
纯手工模拟!
时间复杂度
参考文献
C++ 代码
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int N=1000010;
vector<int> v[55];
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
int t=i,s=0;
while(t)
{
s+=t%10;
t/=10;
}
v[s].push_back(i);
}
int ans;
for(int i=1;i<=54;i++)
{
m-=v[i].size();
if(m<=0)
{
sort(v[i].begin(),v[i].end());
m+=v[i].size();
ans=v[i][m-1];
break;
}
}
cout<<ans<<endl;
return 0;
}
这个写法确实快
感觉这个题用二分能做到log(n)
哈哈,就是不知道怎么二分才这么写的