题目描述
时间限制: 1 Sec 内存限制: 128 MB
给出一个N位数字串,删除任意K位,使剩下的数最大。
输入
第1行:2个整数N和K(1<=K<=N<=500000)
第2行:N个数字(可能为0)
输出
第1行:1个可行到的最大的数
样例输入
10 4
4177252841
样例输出
775841
分析
这道题与我们的版本一(最小新整数)的不同就是这是求最大。
我们同样可以用类似的思想,即为如果此数比下一个数大,就弹出。
(如果用栈会更好)
代码
#include<cstdio>
const int MAXN=500000;
int m,n,p,q[MAXN+5],k=1;char c[MAXN+5];
int main()
{
scanf("%d%d%s",&m,&n,c);q[0]=100;
if(m==n){printf("0\n");return 0;}
for(int i=1;i<=m;i++)
{
p=c[i-1]-'0';q[k]=p;
while(p>q[k-1]&&n>0)
{q[k]=0;q[k-1]=p;k--;n--;}k++;
}
if(n)
{
for(int j=1;j<=n;j++)
printf("%d",q[j]);
puts("");return 0;
}
if(!n)
{
for(int j=1;j<k;j++)
printf("%d",q[j]);
puts("");return 0;
}
}