题目描述:
输入一个高精度的自然数n,去掉其中任意s个数字后剩下的数字按原来从左到右的次序组成一个新的正整数。编程对给定的n和s,寻找一种方案使得剩下的数字组成的新数最小。
输出新的自然数。(n不超过240位)
输入格式:
输入两个自然数,一个n,一个s。
输出格式:
输出一个自然数,最后剩下的最小自然数。
样例输入:
175438 4
样例输出:
13
提示:
样例解释:
175438
第一次删掉7后15438
第二次删掉5后1438
第三次删掉4后138
第四次删掉8后13
这是其中一种删法,可能有其他删法。
注意:
不用去除前导零。
数的每一位都被删之后输出0。
时间限制: 1000ms
空间限制: 256MB
因为数字n非常大,要用字符串输入。
贪心策略:
将上升序列的终点删除。
代码实现:
#include<bits/stdc++.h>
using namespace std;
long long n;
string s;
int main(){
cin>>s>>n;
if(s.length()<=n){
cout<<0;
return 0;
}
for(int i=0;i<n;i++){
int j=0;
while(j<s.length()&&s[j]<=s[j+1])j++;
s.erase(j,1);
}
while(s[0]=='0'&&s.size()>1/*若位数删没了就不要再删了*/)s.erase(0,1);
cout<<s;
return 0;
}