[R81B] 文件同步


数据规模:1≤n≤1001 \le n \le 100,S,TS,T 的长度均为 nn,且只包含字符 0 和 1。

思路

同步方向只有两种,分别算出各自需要复制的文件数,取较大者即可。

从第一个文件夹同步到第二个。 来源是第一个文件夹,目标中已存在的文件不复制,因此真正需要复制的,恰好是那些在 SS 中存在、而在 TT 中不存在的编号,即满足 Si=S_i = 1 且 Ti=T_i = 0 的位置个数,记作 aa。

从第二个文件夹同步到第一个。 同理,需要复制的编号满足 Ti=T_i = 1 且 Si=S_i = 0,记作 bb。

答案为 max⁡(a,b)\max(a,b)。两位同时存在(1/1)或同时不存在(0/0)的编号对两个方向都没有贡献,只需一趟扫描同时累计 aa 与 bb。

复杂度

时间 O(n)O(n),额外空间 O(1)O(1)(不计读入的两个字符串)。

仓颉实现

查看仓颉实现
import std.convert.*
import std.env.*

main() {
    let reader = getStdIn()
    let n = Int64.parse(reader.readln().getOrThrow())
    let s = reader.readln().getOrThrow()
    let t = reader.readln().getOrThrow()
    var a: Int64 = 0
    var b: Int64 = 0
    for (i in 0..n) {
        let sc = Int64(s[i])
        let tc = Int64(t[i])
        if (sc == 49 && tc == 48) {
            a += 1
        }
        if (sc == 48 && tc == 49) {
            b += 1
        }
    }
    if (a > b) {
        println(a)
    } else {
        println(b)
    }
}