最大的数字
题目描述
给定一个十进制整数 n n n,保证 n n n 的首位不为 0 0 0,你必须删除其中 d d d个数字,使得留下的数字最大。请输出留下的最大数。
输入格式
-
第一行:单个整数表示 d d d
-
第二行:单个整数表示 n n n
输出格式
- 单个整数:表示 n n n被删除 d d d个数字之后留下的最大数
样例 #1
样例输入 #1
3
10000
样例输出 #1
10
样例 #2
样例输入 #2
3
42391
样例输出 #2
91
提示
30% 的数据, n < 10000 , d ≤ 2 n<10000,d≤2 n<10000,d≤2
60% 的数据, n < 1 0 500 , d ≤ 200 n<10^{500} ,d≤200 n<10500,d≤200
100% 的数据, 1 ≤ n < 1 0 300000 , 1 ≤ d < n 1≤n<10^{300000},1≤d<n 1≤n<10300000,1≤d<n
#include<bits/stdc++.h>
using namespace std;
string s, ans;
int d;
stack<char> t;
int main() {
cin >> d;
cin >> s;
int len = s.size();
for (int i = 0; i < len; i++) {
//栈不空,当前比前一个数大,就删除前一个数
while (!t.empty() && d > 0 && s[i] > t.top()) {
t.pop();
d--;
}
t.push(s[i]);
}
while (d--) t.pop(); //删除个数没达到,从后面继续删
while (!t.empty()) {
ans = t.top() + ans;
t.pop();
}
cout << ans;
return 0;
}