[R28B]晚宴
数据规模:,。
思路
餐桌顺时针旋转 个单位时,原来在位置 的菜移动到位置 。等价地说,旋转后位置 上的菜来自初始位置 。美食家 被满足的条件就是 。
旋转量 只有 种取值(),数据规模 ,所以直接枚举每一种旋转量 ,再 统计该旋转下被满足的美食家数量,取所有 中的最大值即为答案。
复杂度
时间 ,空间 。
仓颉实现
import std.env.*
import std.convert.*
main(): Int64 {
let reader = getStdIn()
let n = Int64.parse(reader.readln().getOrThrow())
let a = reader.readln().getOrThrow().split(" ", removeEmpty: true).map({ p: String => Int64.parse(p) })
let b = reader.readln().getOrThrow().split(" ", removeEmpty: true).map({ p: String => Int64.parse(p) })
let nn = n
var ans: Int64 = 0
for (k in 0..nn) {
var cnt: Int64 = 0
for (i in 0..nn) {
var j = (i - k) % nn
if (j < 0) {
j = j + nn
}
if (b[j] == a[i]) {
cnt = cnt + 1
}
}
if (cnt > ans) {
ans = cnt
}
}
println(ans.toString())
return 0
}