删数问题
题目链接:https://www.luogu.com.cn/discuss?forum=P1106
题意:
给定一个长整数,删去其中k个数,使最终的数最小
思路:
发现从左至右,如果一个数大于后面相邻的那一个数,则贪心地想将这个数删掉会使答案更优
删除某个数可以用字符串函数 s.erase(i,1) 意思是删掉从i位置开始的长度为1的字符
注意这会立即改变字符串,因此要让删掉的数前面的那个数再次与下一个数进行比较
最后删去前导0,(不会使用k的次数)
void solve(){
string res;cin>>res;
int k;cin>>k;
res+='0';
int i=0;
while(k){
if(res[i]<=res[i+1])i++;
else{
res.erase(i,1);
k--;
i--;
}
}
i=0;
while(res[i]=='0'&&res.size()>2){
res.erase(i,1);
}
for(int i=0;i<res.size()-1;i++){
cout<<res[i];
}
}