游客 Signup | Login
中文 | En

1972 - 寻找最大数

请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大,

比如当n=92081346718538,m=10时,则新的最大数是9888

Input

第一行输入一个正整数T,表示有T组测试数据
每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数)

Output

每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数

Examples

Input

2
92081346718538 10
1008908 5

Output

9888
98

Solution C

#include"stdio.h"
#include"string.h"
int bijiao(int i,char *s,int n)
{
    int j;
    for(j=0;j<n;j++)
        if(s[i]>s[j])
        break;
    if(j>=n)
        return 1;
    return 0;
}
void shanchu(int i,char *s,int n)
{
    for(;i<n-1;i++)
        s[i]=s[i+1];
}
int main()
{
    int n,m;
    scanf("%d",&n);
    while(n--)
    {
        char str[101];
        scanf("%s%d",str,&m);
        int i,k=strlen(str);
        int j=k-m;
        for(i=0;i<k;)
            if(bijiao(i,str,k))
        {
            shanchu(i,str,k);
                m--;i=0;
                if(m==0)
                    break;
        }
        else i++;
        for(i=0;i<j;i++)
            printf("%c",str[i]);
        printf("\n");
    }
    return 0;
}

Solution C++

#include<iostream>
#include<iostream>
using namespace std;
int a[100]={0};
int main()
{
	int n;
	cin >> n;
	int q=1;
	while(n--)
	{
		++q;
		string s;
		cin >> s;
		int m;
		cin >> m;
		int t = s.size();
		for(int i = 1;i <= m; ++i)
		{
			for(int j = 0;j < t-1;++j)
			if(s[j] < s[j+1])
			{
				for(int k = j;k < t-1; k++)
				s[k] = s[k+1];
				break;
			}
			t--;
		}
		for(int i = 0;i < t; ++i)
		{
			a[q]=a[q]*10+s[i]-'0';
		}
	}
	for(int i=2;i<=q;++i)
	cout<<a[i]<<endl;
	return 0;
}
Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题