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;
}
posted @ 2024-01-04 19:04  IOI_official  阅读(23)  评论(0)    收藏  举报  来源