[R81B] 文件同步
数据规模:, 的长度均为 ,且只包含字符
0和1。
思路
同步方向只有两种,分别算出各自需要复制的文件数,取较大者即可。
从第一个文件夹同步到第二个。 来源是第一个文件夹,目标中已存在的文件不复制,因此真正需要复制的,恰好是那些在 中存在、而在 中不存在的编号,即满足 1 且 0 的位置个数,记作 。
从第二个文件夹同步到第一个。 同理,需要复制的编号满足 1 且 0,记作 。
答案为 。两位同时存在(1/1)或同时不存在(0/0)的编号对两个方向都没有贡献,只需一趟扫描同时累计 与 。
复杂度
时间 ,额外空间 (不计读入的两个字符串)。
仓颉实现
查看仓颉实现
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)
}
}