删数问题

题目链接: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];
	}
}
posted @ 2025-03-12 15:56  Marinaco  阅读(13)  评论(0)    收藏  举报
//雪花飘落效果