欢迎光临
我们一直在努力

删数问题(贪心)

题目描述

给定一个用十进制数字串表示的高精度正整数 n。从中恰好删除 k 位数字后,将剩余数字按它们在原串中的相对顺序拼接成一个新的非负整数。

请输出所有合法删除方案中能够得到的最小整数。

剩余数字串可以含有前导零,但输出时不得保留前导零。如果剩余数字全部为 0,则输出单个 0。

输入格式

输入共两行。

第一行是高精度正整数 n。

第二行是正整数 k,表示必须删除的数字位数。

输出格式

输出一个整数,表示删除恰好 k 位后能够得到的最小值。

样例说明

删除数字 7,5,4,8 后,剩余数字按原相对顺序组成 13,这是能够得到的最小整数。

数据范围

设 ∣n∣ 表示数字串 n 的长度。保证:

  • 1≤k<∣n∣≤250;
  • n 只含字符 0 到 9,且首位不为 0。

因此,k 不会等于 0,也不会等于 ∣n∣;删除后至少保留一位数字。

数据特征

表中每一行表示:对于前 x% 的测试数据,该行列出的条件同时成立。

#include<bits/stdc++.h>
using namespace std;
string s;
int k;
int main(){
cin>>s>>k;
if(s.size()==k){
cout<<0;
return 0;
}
int yu=s.size();
while(k–){
for(int i=0; i<yu-1; i++){
//if(i==0 && s[i+1]==0)continue;
if(s[i]>s[i+1]){
for(int j=i; j<yu-1; j++)
s[j]=s[j+1];
break;
}
}
yu–;
}
int f=0,m=yu;
while(s[f]=='0' && m>1){
f++;
m–;
}
for(int i=f; i<yu; i++)
cout<<s[i];
return 0;}

赞(0)
未经允许不得转载:171主机测评 » 删数问题(贪心)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址