题目大意:
给一串字符,其中包括n个字符,要求删除d个字符,使得剩下的字符尽量大
由于要使得最后剩余的字符串尽量大,我们可以边 输入边处理。
贪心策略:
当已经存在的字符小于n-d时,把字符加进去,如果 k+n-i>n-d(k是已经保存下来的字符个数,n是总个数,i是当前输入的字符个数,d数需要删除的字符个数,此式子代表意义:已经剩余的字符个数,大于需要剩余字符的个数)此时需要删除,
代码如下:
#include <iostream>
#include <queue>
#include <algorithm>
#include <cstdio>
#include <string>
#include <queue>
#define mp make_pair<int,int>
using namespace std;
const int MAXN=200050;
int main()
{
int n,d;
while(~scanf("%d%d",&n,&d)&&(n+d))
{
int k=0;
char c;
getchar();
char a[100000];
for(int i=0; i<n; i++)
{
c=getchar();
while(k>0&&c>a[k]&&k>i-d) k--;
if(k+d<n)
a[++k]=c;
}
a[++k]='\0';
cout<<(a+1)<<endl;
}
return 0;
}