您的位置:首页 > 其它

【HDU 3183】 字符串处理

2012-11-07 00:18 337 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3183

题目大意:给你一串数字,要你删去n个数字,使得删去n个数字后数值最小。

解题思路:

蛋疼的水题,搞了我一天。开始是暴力模拟,各种测试对但就是过不了。所以换了个写法。

思路主要是这样的: 因为需要你删除m个数使得结果最小,所以每次对字符串进行一次遍历,从前往后,只要a[i]>a[j] (j的位置为i后面未标记的第一个) 则对a[i]进行一次标记(赋赋值)将其除外,进行n次遍历,这样就删除了n个数字。因为删除的都是和后面比较相比下大的,所得结果当然就最小了。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

int main()
{
int  n, i, j, k;
char  f[1024];
int   a[1024];
while(scanf("%s%d",f,&n)!=EOF)
{
int len=strlen(f);
memset(a,0,sizeof(a));
for(i=0; i<len; i++)
a[i]=f[i]-'0';
for(i=0; i<n; i++)
for(j=0; j<len; j++)
{
if(a[j]>0)
{
for(k=j+1; k<len; k++)
{
if(a[k]>=0) break;
}
if(a[j]>a[k])
{
a[j]=-1;
break;
}
}
}
int flag=0;
for(i=0; i<len; i++)
{
if(a[i]<0||(!flag&&a[i]==0))
{
continue;
}
else
{
flag=1;
printf("%d",a[i]);
}
}
if(!flag)
cout << 0;
cout << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: