老大的烦恼

来源:互联网 发布:idea调试java web项目 编辑:程序博客网 时间:2024/03/29 03:28

2555: 老大的烦恼

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 113  Solved: 36
[Submit][Status][Web Board]

Description

万恶的小黑,布置了一道题给老大做:给你一个n位的数,现在要求 你随意删除m位后,任意改变顺序,输出其能够构成的最小有效整数(即不能有前导零,如果只含有0则输出0)。但是,这正赶上了老大的对象从故乡来看他,老 大怎么能丢失这种机会呢。所以他找你寻求帮助,帮他完成这个问题吧。

Input

输入包含T组数据。每组数据包含两行,第一行包含两个整数n和m,代表一个数的位数和要删除的位数个数;第二行为一个n位的整数;(0<=m<n<5000)

Output

每组数据输出一行,表示删除后能够构成的最小整数

Sample Input

25 2543215 442130

Sample Output

1230


#include <iostream>
#include <stdlib.h>
using namespace std;
int cmp1(const void *a,constvoid *b)
{return*(char *)b-*(char *)a;}
int cmp2(const void *a,constvoid *b)
{return*(char *)a-*(char *)b;}
int main()
{intt,n,m,i,j,c,k,s,g;
char a[5005],b[5005];
cin>>t;
while(t--)
{cin>>n>>m;
for(i=0;i<n;i++)
cin>>a[i];
qsort(a,n,sizeof(a[0]),cmp1);
c=0;
for(i=m;i<n;i++)
b[c++]=a[i];
qsort(b,c,sizeof(b[0]),cmp2);
k=0;s=0;
for(i=0;i<c;i++)
{if(b[i]=='0')
{k=1;s=s+k;}
}
if(s==c) cout<<"0";
else
{for(i=0;i<c;i++)
{if(b[i]!='0')
{g=i;break;}
}
cout<<b[g];
for(j=0;j<c;j++)
{if(j==g){continue;}
cout<<b[j];
}
}
cout<<endl;
}
return0;
}

0 0
原创粉丝点击