2555: 老大的烦恼

来源:互联网 发布:孔令德 源码 解压密码 编辑:程序博客网 时间:2024/04/29 01:22

永不放弃,永不放弃又有两个原则,第一个原则是永不放弃,第二个原则就是:当你想放弃时回头看第一个原则。

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 <string>#include <algorithm>using namespace std;int main(){    int T,n,m,t;    char a[5000];    cin>>T;    for(int i=1;i<=T;i++)    {        cin>>n>>m;        cin>>a;        sort(a,a+n);            //对字符数组进行排序        t=0;                    //初始化t 用来判断舍弃之后数组是否全为0        a[n-m]='\0';            //从大数舍弃 将最后一位表为/0        for(int j=0;j<n-m;j++)  //循环输出第一位不为零的数        {            if(a[j]!='0')            {                cout<<a[j];                a[j]='a';       //将已输出的数标记为字符a 以便判断不再输出                break;            }            if(a[j]=='0') t++;        }        if(t!=n-m)        {for(int j=0;a[j]!='\0';j++)//循环输出结果            if(a[j]!='a') cout<<a[j];}        else cout<<"0";        cout<<endl;    }    return 0;}


0 0