最小の番号を検索します。
N整数高精度正(以下5000)を入力し、前記新たな正の整数を形成するために、元の左と右を注文するために、任意の残りのk桁の数字を除去した後。
与えられたNおよびKは、新しい番号の残りの桁となるよう溶液の最小値を見つけます。入力フォーマット:
所与これ以上千5以上の正の整数nの最初の行。2行目は非負整数kの所定のビット数nを超えていません。
出力フォーマット:
最後に残った最低限の数。
サンプル入力:
175438 4
出力例:
13
アイデア:
整数のビットの固定数の前提の下で、そう可能な限り小さく高い数は、整数の値が小さいこと
例えば175438
削除1:削除7--15438(8--17543を削除しない)
2を削除します。削除7,5--1438
削除3:754--138削除(785--143を削除しません)
あなたが番号をインクリメントした場合、検索の順序に従って、低い高は、その後、最後の数字を削除
減少し、最初のを削除した場合、最初の文字間隔の減少(可能な限り高いなど)、
その後、戻って最初の文字列に、上記の規則によって次の番号を削除します。
コード:
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<vector>
#include<iomanip>
#include<vector>
#include<string>
#define M 5010
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;
vector<int>v;
string s;
int main(){
cin >> s;
for(int i=0; s[i]; i++)
v.push_back(s[i]-'0');
v.push_back(-1);
int k;
cin >> k;
while(k--){ //删除k个
int t=0;
while(v[t]<=v[t+1] && v[t]!=-1)
t++;
v.erase(v.begin()+t);
}
bool flag = 0; //输出
for(int i=0; v[i]!=-1; i++){
if(v[i]!=0) flag = 1;
if(flag) cout << v[i];
}
if(!flag) cout << 0;
cout << endl;
return 0;
}