题目描述
键盘输入一个高精度的正整数N,去掉其中任意M个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和M寻找一种方案使得剩下的数字组成的新数最小。输出组成的新的正整数。
输入数据均不需判错。如果去掉了某几个位后得到的新整数开头为0,保留0。
输入数据均不需判错。如果去掉了某几个位后得到的新整数开头为0,保留0。
输入
第一行为高精度正整数N(N的长度不超过106位)
第二行为M(0≤M≤N的长度)
第二行为M(0≤M≤N的长度)
输出
去掉M位后的最小新数。
样例输入 Copy
【样例1】
505
1
【样例2】
82386782
3
样例输出 Copy
【样例1】 05 【样例2】 23672
解析:
就是如果这一位大于他的后一位,把他去掉一定值增大
注意要用一个栈循环去掉值
#include<iostream> #include<algorithm> #include<cstring> #include<stack> using namespace std; const int maxn=1e6+100; string a; int v[maxn]; int vis[maxn]; int n; stack<char>q; char p[maxn]; int main(){ cin>>a>>n; int ma=0; q.push(a[0]); for(int i=1;i<a.size();i++){ while(!q.empty()&&a[i]<q.top()&&n>0){ q.pop(); n--; } q.push(a[i]); } int cnt=0; while(!q.empty()){ p[++cnt]=q.top(); q.pop(); } for(int i=cnt;i>=1;i--){ cout<<p[i]; } }