P8301 [CoE R4 A/Stoi2041] 娘子 题解

思路

题目说要先取反,再重排。但我们可以先重排,再取反。重排时要把 a a a b b b 的每个 1 1 1 对齐,再把 a a a b b b 多出来的 1 1 1 a a a 的对应位置取反。题目问取反的最少次数,那不就是算出来 a a a b b b 1 1 1 的个数差的绝对值吗!


举个例子:
输入:

5
1 0 1 0 1
0 1 0 1 0

输出:

1

如何做到的:

先把 a a a 的第三个取反,再对齐。按我们的方法,就是先把 a a a 排成 0 1 1 1 0,再把第三个取反,答案也是 1 1 1


方法

按上面说的统计出 a a a b b b 1 1 1 的个数,再输出它们的差的绝对值。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n, cnt1, cnt2;
string str1, str2;
int main()
{
	cin >> n >> str1;
	for (int i = 0; i < str1.length(); i++) {
		if (str1[i] == '1') cnt1++;
	}
    cin >> str2;
	for (int i = 0; i < str2.length(); i++) {
		if (str2[i] == '1') cnt2++;
	}
	cout << abs(cnt2 - cnt1);
	return 0;
 } 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值