題目:http://betterang.club/problem.php?id=1205
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll t,k,p=1,len;
void slove(){
stack<char> m,n;//單調棧
string c;
vector<int> s;//爲什麼用vector? 因爲數太多-_-
cin>>c;
cin>>k;
len=c.length();
for(ll i=0;i<len;i++){
if(m.empty())
m.push(c[i]);
else{
while(!m.empty() && m.top()>c[i] && len-k-m.size()<len-i ){//棧頂元素比當前數大且保證剩下的數足夠就pop
m.pop();
}
m.push(c[i]);
}
}
while(m.size()>len-k) m.pop();//保證棧中有len-k個元素
while(!m.empty()){//由於棧元素的先進後出 所以要把棧中元素倒置才能將所求結果存在數組s中
//cout<<m.top();
n.push(m.top());
m.pop();
}
ll flag=1;
while(!n.empty()){
if(n.top()=='0' && flag==1) {//如果結果最前面是0就不用存了呀
n.pop();
}
else{
flag=0;
s.push_back(n.top()-'0');
n.pop();
}
}
if(flag==1) //如果結果中只有0
cout<<0<<endl<<233<<endl;
else{
ll p=s.size();
for(ll i=0;i<p;i++) cout<<s[i];
cout<<endl;
if(p>3){
s[p-1]+=3;
s[p-2]+=3;
s[p-3]+=2;
for(ll i=p-1;i>0;i--){
if(s[i]>9) {
s[i-1]+=s[i]/10;s[i]%=10;
}
}
if(s[0]>9) {//考慮最高位進位
cout<<s[0]/10;
s[0]%=10;
}
for(ll i=0;i<p;i++){
cout<<s[i];
}
}
else{
ll sum=0;
for(ll i=0;i<p;i++){
sum=sum*10+s[i];
}
cout<<sum+233<<endl;
}
}
}
int main(){
slove();
return 0;
}
/*
1023004 3
4
237
1003 2
0
233
145759411 1
14559411
14559644
99999 1
9999
10232
*/