给您一个整数,您可以删除准确的m位数字。左边的数字将形成一个新的整数。您应该将其最小化。 您无权更改数字顺序。
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define fi first
#define se second
typedef long long ll;
typedef pair<int,int> pii;
typedef double db;
const ll mod=1000000007;
const int maxn=1e3+10;
const int inf=0x3f3f3f3f;
const double eps=1e-6;
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
int dp[maxn][30],len;
int t,n,m;
char s[maxn];
vector<int> a;
int Min(int x,int y){return s[x]<=s[y]?x:y;}
void RMQ(){
memset(dp,0,sizeof dp);
for(int i=0;i<len;i++){
dp[i][0] = i;
}
for(int j=1;(1<<j)<len;j++){
for(int i=0;i+(1<<j)-1<len;i++){
dp[i][j] = Min(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);
}
}
}
int query(int l,int r){
int k = log(r-l+1)/log(2.0);
return Min(dp[l][k],dp[r-(1<<k)+1][k]);
}
int main(){
while(~scanf("%s%d",s,&n)) {
len=strlen(s);
a.clear();
RMQ();
n = len - n;
int pos=0;
while(n--){
pos=query(pos,len-n-1);
a.push_back(pos);
pos++;
}
bool flag=0,ok=0;
for(int i=0;i<a.size();i++){
if(flag){
printf("%c",s[a[i]]);
ok=1;flag=1;
}else if(s[a[i]]!='0'){
printf("%c",s[a[i]]);
ok=1;flag=1;
}
}
if(!ok) puts("0");
else puts("");
}
return 0;
}