您的位置:首页 > 其它

hdoj--3183--A Magic Lamp(贪心)

2015-11-27 22:32 393 查看

A Magic Lamp

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 2584 Accepted Submission(s): 1010


[align=left]Problem Description[/align]
Kiki likes traveling. One day she finds a magic lamp, unfortunately the genie in the lamp is not so kind. Kiki must answer a question, and then the genie will realize one of her dreams.

The question is: give you an integer, you are allowed to delete exactly m digits. The left digits will form a new integer. You should make it minimum.

You are not allowed to change the order of the digits. Now can you help Kiki to realize her dream?

[align=left]Input[/align]
There are several test cases.

Each test case will contain an integer you are given (which may at most contains 1000 digits.) and the integer m (if the integer contains n digits, m will not bigger then n). The given integer will not contain leading zero.

[align=left]Output[/align]
For each case, output the minimum result you can get in one line.

If the result contains leading zero, ignore it.

[align=left]Sample Input[/align]

178543 4
1000001 1
100001 2
12345 2
54321 2


[align=left]Sample Output[/align]

13
1
0
123
321


[align=left]Source[/align]
HDU 2009-11 Programming Contest

#include<stdio.h>
#include<string.h>
char s[1010];
int vis[1010];
int a[1010];
int main()
{
int i,j,k,l,n,m;
while(scanf("%s",s)!=EOF)
{
scanf("%d",&m);
l=strlen(s);
for(i=0;i<l;i++)
a[i]=s[i]-'0';
n=0;
int mm=m;
memset(vis,0,sizeof(vis));
while(mm--)
{
for(i=0;i<l-1;i++)
{
if(!vis[i])
{
j=i+1;
while(vis[j])
j++;
if(a[i]>a[j])
{
vis[i]=1;
n++;
break;
}
}
}
}
int kk=m-n;
for(i=l-1;i>=0;i--)
{
if(!vis[i]&&kk)
{
vis[i]=1;
kk--;
}
}
int flag=0;
int p=0;
for(i=0;i<l;i++)
{
if(!vis[i])
{
if(s[i]!='0')
flag=1;
if(flag)
{
printf("%c",s[i]);
p++;
}
}
}
if(p==0)
printf("0");
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: