#P1424. Diamonds

Diamonds

本题没有可用的提交语言。

题目描述

考虑一个由 MM 行和 NN 列组成的平面网格。该网格共有 M×NM \times N 个交叉点,每个交叉点的坐标表示为 (i,j)(i, j),其中 i=0,1,,N1i = 0, 1, \dots, N-1j=0,1,,M1j = 0, 1, \dots, M-1

假设现在有 KM×NK \leq M \times N 个点被放置在 KK 个不同的网格交叉点上。

定义一个菱形区域 D(i,j,r)D(i, j, r),其中心位于交叉点 (i,j)(i, j),形状为对角线长度为 2r2r 的正方形,并顺时针旋转 45 度,其中 i=0,1,,N1i = 0, 1, \dots, N-1j=0,1,,M1j = 0, 1, \dots, M-1rr 为菱形的半径,可以是任意正整数。

Manoranjan 感兴趣的是找到菱形的最小半径 Rmin(Pmin)R_{\text{min}}(P_{\text{min}}),使得无论菱形的中心位于网格的哪个交叉点,该菱形都至少覆盖 PminP_{\text{min}} 个点,其中 Pmin=1,2,,KP_{\text{min}} = 1, 2, \dots, K。同时,设 Pmax(Pmin)P_{\text{max}}(P_{\text{min}}) 为半径 Rmin(Pmin)R_{\text{min}}(P_{\text{min}}) 的菱形最多能覆盖的点数。考虑以下示例:五个点 (0,0)(0,0)(4,0)(4,0)(2,2)(2,2)(0,4)(0,4)(4,4)(4,4) 被放置在 5577 列的网格上。菱形 D(2,4,1)D(2,4,1) 不覆盖任何点,D(2,1,2)D(2,1,2) 覆盖 11 个点,D(3,3,4)D(3,3,4) 覆盖 44 个点。

输入格式

11 行给出网格的行数 MM 和列数 NN。接下来的若干行给出 KK 个点的坐标 (x,y)(x, y),其中 KM×NK \leq M \times N。可以假设 1M1001 \leq M \leq 1001N1001 \leq N \leq 100。每个点的坐标由两个整数表示,分别对应 xxyy 坐标。输入中的所有数值由一个或多个空白字符(包括空格和制表符)分隔。超出网格范围的点将被视为无效输入并丢弃(例如,样例输入中的最后一个点 (0,5)(0,5) 会被丢弃)。

输出格式

对于每一个可能的 PminP_{\text{min}} 值,输出一行,格式为:

Pmin Rmin(Pmin) Pmax(Pmin)

仅当 Rmin(Pmin)R_{\text{min}}(P_{\text{min}}) 保证恰好覆盖 PminP_{\text{min}} 个点时,才输出该行。例如,在样例输出中,没有 Pmin=2P_{\text{min}}=2 的行,因为 Rmin(2)=Rmin(3)=6R_{\text{min}}(2) = R_{\text{min}}(3) = 6

所有数值应右对齐列标题。

输入样例 1

5 	7
0 	0 0 	4
4 0
4 4	       2 2
	0 5

输出样例 1

Pmin Rmin(Pmin) Pmax(Pmin)
   1           4           5
   3           6           5
   4           8           5
   5          10           5

来源

达卡 2002