P8301 [CoE R4 A/Stoi2041] 娘子
题意
给你两个 $0,1$ 序列 $a,b$,你要把 $a$ 变成 $b$。
你可以翻转任意 $a_i$,之后把 $a$ 任意排列。
问最少翻转几个 $a_i$。
思路
可以看出,一个 $0,1$ 序列无论怎么排列,$0,1$ 的个数都不变。
所以,翻转任意 $a_i$ 之后, $a,b$ 中 $1$ 的个数一定相等。
也就是说,如果 $a$ 中 $1$ 不够,就翻转一些 $0$,否则翻转一些 $1$,
无论哪种情况,翻转次数都是 $a,b$ 初始时 $1$ 的个数之差。
代码
注意 abs(std::size_t)
的调用有歧义,要手动转成 abs(int)
。
#include <iostream>
#include <bitset>
using namespace std;
int main()
{
int n;bitset<1000> a, b;cin >> n >> a >> b;
return cout << abs(int(a.count() - b.count())), 0;
}