#796. 棋盘(chess)

棋盘(chess)

题目描述

给你一个 nnmm 列的国际象棋棋盘。最初棋盘上有 kk红色骑士(骑士是国际象棋中的马),你需要在每个格子上放置一个骑士,并为其选择一种颜色:白色或黑色(红色骑士的位置与颜色在输入中已给出,剩余格子由你填白或黑)。每个格子恰好放一个骑士。

骑士的走法为“日”字:若骑士在 (x1,y1)(x_1,y_1),则它可以攻击 (x2,y2)(x_2,y_2) 当且仅当满足任一条件:

  • x1x2=2|x_1-x_2|=2y1y2=1|y_1-y_2|=1,或
  • x1x2=1|x_1-x_2|=1y1y2=2|y_1-y_2|=2

下面是一些骑士可以攻击哪些格子的示例。在下图中,如果骑士当前在蓝色格子,则它可以攻击所有红色格子(且仅能攻击这些格子)。

定义一次 骑士对决 为一对不同颜色的骑士互相攻击(即两个格子上的骑士颜色不同且位置互为骑士可攻击的位置)。

你的目标是:在剩余格子中任意选择白/黑两色放置骑士,使得骑士对决的总数最大化。输出这个最大值。

输入格式

输入包含多组测试数据。

  • 第一行包含一个整数 tt,表示测试数据组数。

  • 对于每组测试数据:

    • 第一行包含三个整数 n,m,kn, m, k,表示棋盘为 n×mn\times m,初始有 kk 个红色骑士。
    • 接下来 kk 行,每行两个整数 x,yx,y1xn, 1ym1\le x\le n,\ 1\le y\le m),表示棋盘上在位置 (x,y)(x,y) 放有一个红色骑士。保证没有两个红色骑士放在同一格。

坐标系约定:行号 xx11nn,列号 yy11mm

输出格式

对于每组测试数据,输出一行,包含一个整数:在最优填色方案下,最多可能产生的骑士对决对数。

样例输入 1

2
2 4 3
1 1
1 4
2 1
2 3 1
2 3

样例输出 1

4
2

说明

样例解释

一个可能的最优布置(颜色用 R=R = 红,B=B= 黑,W=W= 白 表示两种你可选颜色中的一种)如下图示(示意)可以得到 44 对骑士对决,例如:

  • (1,1)(1,1) 的红骑士攻击 (2,3)(2,3) 的黑骑士;
  • (1,3)(1,3) 的黑骑士攻击 (2,1)(2,1) 的红骑士;
  • (1,2)(1,2) 的黑骑士攻击 (2,4)(2,4) 的白骑士;
  • (1,4)(1,4) 的红骑士攻击 (2,2)(2,2) 的白骑士。

样例 2

见选手目录下的 chess/chess2.inchess/chess2.ans。 该测试用例满足测试点 131\sim 3 的约束条件。

样例 3

见选手目录下的 chess/chess3.inchess/chess3.ans。 该测试用例满足测试点 454\sim 5 的约束条件。

样例 4

见选手目录下的 chess/chess4.inchess/chess4.ans。 该测试用例满足测试点 676\sim 7 的约束条件。

样例 5

见选手目录下的 chess/chess5.inchess/chess5.ans。 该测试用例满足测试点 8108\sim 10 的约束条件。

数据范围

对于 100%100\% 的数据,满足:

  • 1t101\le t\le 10
  • 1n,m1001\le n,m\le 100
  • 0kn×m0\le k\le n\times m

保证没有两个红色骑士在同一格子上。

各测试点的附加限制如下表所示:

测试点编号 nn\le mm\le 备注
131\sim 3 44
454\sim 5 66 100100
676\sim 7 100100 k=0k=0(无初始红骑士)
8108\sim 10

大样例

点击下载