CF1037C Equalize

题目描述

给定两个长度相同的二进制字符串 $a$ 和 $b$。你可以对字符串 $a$ 执行以下两种操作: - 交换任意两个下标为 $i$ 和 $j$ 的比特($1 \le i, j \le n$),该操作的代价为 $|i - j|$,即 $i$ 和 $j$ 的绝对差。 - 选择任意一个下标 $i$($1 \le i \le n$),将该位置的比特翻转(将 $0$ 变为 $1$ 或 $1$ 变为 $0$),该操作的代价为 $1$。 请你求出将字符串 $a$ 变为字符串 $b$ 的最小总代价。字符串 $b$ 不允许被修改。

输入格式

第一行包含一个整数 $n$($1 \le n \le 10^6$),表示字符串 $a$ 和 $b$ 的长度。 第二行和第三行分别为字符串 $a$ 和 $b$。 字符串 $a$ 和 $b$ 均由 $n$ 个字符组成,仅包含 '0' 和 '1'。

输出格式

输出一个整数,表示将字符串 $a$ 变为字符串 $b$ 的最小总代价。

说明/提示

在第一个样例中,一种最优方案是翻转第 $1$ 位和第 $3$ 位,字符串 $a$ 变化如下:"100" $\to$ "000" $\to$ "001"。总代价为 $1 + 1 = 2$。 另一种最优方案是交换第 $1$ 位和第 $3$ 位的比特,字符串 $a$ 变化为 "100" $\to$ "001",总代价为 $|1 - 3| = 2$。 在第二个样例中,最优方案是交换第 $2$ 位和第 $3$ 位的比特,字符串 $a$ 变化为 "0101" $\to$ "0011",总代价为 $|2 - 3| = 1$。 由 ChatGPT 4.1 翻译