基本思路就是判断一下删了元素后的外层循环次数,针对不下降子序列而已。如果有更多的hack数据就好了
eg1 input: 8 11
eg1 output:9
eg2 input:9 12
eg2 output:99
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6+5;
bool flag;
priority_queue<int,vector<int>,greater<int> > q;
int main()
{
int n,m;
string s,ans;
q.push(1);
cin>>n>>m;
for(int i = 1;i <= n;i++)
{
int b = q.top();
q.pop();
q.push(b*2+1);
q.push(b*4+5);
string s2;
stringstream s1;
cout<<b;
s1 << b;
s1 >> s2;
s += s2;
}
cout<<endl;
int len = s.size();
int cnt = 0;
int num = 0;
while(flag == 0 && num <= m)
{
for(int i = 0;i < s.size()-1;i++)
{
if(s[i] < s[i+1])
{
cnt++;
s.erase(i,1);
break;
}
if(cnt >= m)
{
flag = 1;
cout<<s;
return 0;
}
}
num++;
}
if(flag == 0)
{
for(int i = 0;i < len-m;i++)
{
cout<<s[i];
}
}
return 0;
}