题目
思路
这道题思路就是把小的数字往前移,然后把挡住小数字的大数字删掉。
可以用单调栈实现。
细节比较多
- 注意前导0
- 可能删不满k个数字,要把最后面的再删满
代码
#include<iostream>
#include<cstdio>
using namespace std;
int fl[5000010],top;
char stack[5000010];
string s;
int n,k;
int main()
{
scanf("%d",&n);
cin>>s;
scanf("%d",&k);
for(int i=0; i<n; i++)
{
while(top>0&&stack[top]>s[i]&&k>0)
top--,k--;
stack[++top]=s[i];
}
int flag=0;
for(int i=1; i<=top-k; i++)
{
if(flag==0&&stack[i]=='0')
continue;
printf("%c",stack[i]);
flag=1;
}
if(flag==0)
printf("0");
return 0;
}