P1106 删数问题

题目描述

键盘输入一个高精度的正整数NN(不超过250250位) ,去掉其中任意kk个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的NN和kk,寻找一种方案使得剩下的数字组成的新数最小。

输入格式

nn (高精度的正整数)

kk(需要删除的数字个数)

输出格式

最后剩下的最小数。

输入输出样例

输入 #1
175438 
4
输出 #1
13
#include<bits/stdc++.h>
using namespace std;
int a[251],b[251],i,j,q,t=1,k,n,l,m=0,x=0,y=1,u=0;
string num;
int main(){
    cin>>num>>l;
    n=num.length();
    int o=l;
    k=n-l;
    for(i=1;i<=n;++i)
	{
		a[i]=num[i-1]-'0';
		b[i]=9;
	}
	while(a[y]==0)
	{
		y++;
	}
	for(i=y;i<=n;i++)
	{
		if(a[i]!=0)
		m++;
		if(a[i]==0)
		{
			
			if(m<=l)
			{
			l-=m;
			u+=m;
			m=0;
			t=i;
				
			}
			else break;
		}
	}
		while(a[t]==0)
	{
		t++;
	}
	int kk=n-t+1-o+u;
	if(kk<=0)
	cout<<0;
    else{
    	for(int j=1;j<=kk;j++)
	{
	for(i=t;i<=n;i++)
	{
		if(a[i]==0&&n-i+1>=kk-j+1)
		{
			b[j]=0;
			t=i+1;
			break;
		}
		if(a[i]<b[j]&&n-i+1>=kk-j+1)
		{
			b[j]=a[i];
			t=i+1;
		}
	}}
	for(i=1;i<=kk;i++)
	{
		cout<<b[i];
	}

	}
    	
}

  

猜你喜欢

转载自www.cnblogs.com/lau1997/p/12589710.html