通行证(Hard Version)
PDF 视图题目描述
有 \(n ^ 2\) 个人排成了一个 \(n\) 行 \(n\) 列的方阵 \(a\),在方阵外,有 \([4n + 4]\) 个人包围了方阵 \(a\),共同形成了一个 \(n + 2\) 行, \(n + 2\) 列的方阵 \(b\)。
对于方阵 \(a\) 中的 \(n ^ 2\) 个人,每个人都有一个识别码 \(a_{ij}\) 用于确认身份,方阵 \(b\) 中剩余的 \([4n + 4]\) 个人的识别码均为 \(10 ^ {100}\),对于通行证 \(card\),如果一个人的识别码 \(x\) 满足 \([x \; | \; card] \neq card\),其中 \("|"\) 表示按位或运算,那么此人将被认定为坏蛋。
得知方阵 \(b\) 中有坏蛋,每个人都非常不安,每个人都将从上下左右四个方向出发,检查途径的人是否是坏蛋(包含自己),若途径坏蛋与自身的最小距离为 \(dis\),则其安全感即为 \(dis\)。
\(MaxBlazeResFire\) 有 \(q\) 张通行证,每次询问他会给你一张通行证 \(card\),并向你询问方阵 \(a\) 中所有人的安全感之和。
输入格式
第一行包含一个整数 \(T\),表示测试数据的组数, \(1 \le T \le 2\)。
对于每组测试数据:
第一行包含两个整数 \(n \; [1 \le n \le 1500]\) 和 \(q \; [1 \le q \le 5 \times 10 ^ 4]\),表示方阵的行数和列数,以及询问次数。
随后 \(n\) 行 \(n\) 列给出一个方阵 \(a\), \(a_{ij} \; [0 \le a_{ij} < 2 ^ {15}]\) 表示位于 \(i\) 行 \(j\) 列的人的识别码;
随后 \(q\) 行,每行包含一个整数 \(card \; [0 \le card < 10 ^ 9]\),表示通行证。
输出格式
对于每个询问,请你打印以 \(card\) 确认身份的前提下,方阵 \(a\) 中所有人的安全感之和。
样例输入
1
5 1
5 5 1 5 5
5 5 1 5 5
1 1 1 1 1
5 5 1 5 5
1 5 1 5 5
1
样例输出
12
评论