题意:给你两个数a,b,从a中删除b个数,使a最小;
思路:刚开始以为去掉最大的数就行了。结果wa了。
后来改成去掉第一个大于后一个数的数,即从前往后找数字,当a[i]>a[i+1] 时去掉a[i[;其中a[i],a[i+1] 都是未被去掉的数。。
提供一组数据:329 1 答案是29
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
char a[1009];
int b[1009];
bool visit[10009];
int m;
int main()
{
freopen("in.txt","r",stdin);
while(~scanf("%s%d",a,&m))
{
int len = strlen(a);
for(int i=0;i<len;i++)
b[i] = a[i]-'0';
b[len] = 0;
memset(visit,false,sizeof(visit));
int f,t;
while(m--)
{
f = -1,t = -1;
for(int i=0;i<=len;i++)
{
if(!visit[i])
{
f = t;
t = i;
}
if(f!=-1&&b[f]>b[t])
{
visit[f] = true;
b[f] = 0;
break;
}
}
}
bool ou = false;
for(int i=0;i<len;i++)
if(!visit[i])
{
if(ou) printf("%d",b[i]);
else
{
if(b[i]>0)
{
printf("%d",b[i]);
ou = true;
}
}
}
if(!ou) printf("0");
printf("\n");
}
return 0;
}