删数
题目描述
输入一个高精度的正整数 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;
}
本文来自博客园,作者:蒟蒻orz,转载请注明原文链接:https://www.cnblogs.com/orzz/p/18122223