CF1913B Swap and Delete 题解

思路。

这是一道挺简单的贪心,由于题目中说交换操作免费,所以我们尽量使用交换,不能交换了再用删除。

求要用的钱也很简单,我们用两个变量分别储存字符串中 0011 的个数,然后开始交换,从字符串开头枚举到字符串结尾,如果遇到 00,就将 11 的数量减 11,反之亦然。

要在每次减之前判断一下数量是否为空,为空就跳出,防止变成负数。

最后要删除的数量就是 00 剩下的数量加 11 剩下的数量。

AC代码。

#include<bits/stdc++.h>
using namespace std;
int t,z,o,c;
string s;
int main(){
	cin>>t;
	while(t--){
		c=z=o=0;
		cin>>s;
		for(int i=0;i<s.size();i++){
			if(s[i]=='0'){
				z++;
			}
			else o++;
		}
		for(int i=0;i<s.size();i++){
			if(s[i]=='0'){
				if(o>0)
					o--;
				else break;
			}
			else{
				if(z>0){
					z--;
				}
				else break;
			}
		}
		cout<<o+z<<endl;
	}
	return 0;
}

本文作者:IOI_official

本文链接:https://www.cnblogs.com/IOI-official/p/18144064

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   IOI_official  阅读(6)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起