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;
}
posted @ 2022-04-28 11:58  Jijidawang  阅读(3)  评论(0编辑  收藏  举报  来源