删数

传送门

题目描述

输入一个高精度的正整数 n(长度小于或等于 240 位),去掉其中任意 s 个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的 n 和 s,寻找一种方案,使得剩下的数字组成的新数最小。

输入格式

输入两行,第 1 行为 1 个正整数 n,第 2 行为 1 个整数 s。

输出格式

输出一行一个数,表示最后剩下的最小数。

输入样例

178543
4

输出样例

13

主要思路

举个栗子:一个正整数a为 785314,经过删数后得到的最小的正整数应该是 14。

这道题乍好像挺简单,我排个序,删4个最大值不就解决了吗? 但仔细一看,好像又不太对,上面例子删4个最大值后的值是31,明显不等于14。 我们观察上面栗子,发现比4小的3因为和1逆序排列而被删除。进一步总结就是从第一个数开始一个数比后一个数大就删除这个数,最后就可以得到一个最小数。 所以进一步总结,这道题是贪心?money?

——————AC代码

#include<bits/stdc++.h>
using namespace std;
string n;int s;
int main(){
	cin>>n>>s;
	while(s){
		int t=0;
		while(t<n.size()-1&&n[t]<=n[t+1])t++;
		n.erase(t,1);
		s--;
	}
	while(n.size()>1&&n[0]=='0')n.erase(0, 1);
	cout<<n;
}
posted @ 2021-01-26 16:16  蒟蒻orz  阅读(3)  评论(0编辑  收藏  举报  来源