CF690B2 Recover Polygon (medium)

题目描述

现在 Heidi 已经确保她的僵尸污染等级检测器可以正常工作,是时候发动攻击了!这一次,僵尸巢穴是一个严格凸多边形,且所有顶点都位于整数格点上。对于每一个格点单元,Heidi 都知道其僵尸污染等级——即该单元四个角中有多少个角在巢穴内部或边界上。 给定这些信息,Heidi 想要精确知道巢穴的形状,以便对僵尸进行毁灭性打击。请你帮帮她! ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF690B2/2c935730d8a3e2a07073e9f21e778227fe9ea585.png)

输入格式

输入包含多组测试数据。 每组测试数据的第一行包含一个整数 $N$,表示格点网格的大小($5 \leq N \leq 500$)。接下来的 $N$ 行,每行包含 $N$ 个字符,描述了每个格点单元的僵尸污染等级。每个字符都是 $0$ 到 $4$ 之间的数字。 格点单元的顺序与上图一致:行按 $y$ 坐标递减排列,在同一行内,格点单元按 $x$ 坐标递增排列。也就是说,第一行对应坐标为 $(1, N), \ldots, (N, N)$ 的格点单元,最后一行对应坐标为 $(1, 1), \ldots, (N, 1)$ 的格点单元。 输入的最后一行为一个零。该行不作为测试数据处理。所有测试数据中 $N$ 的总和不超过 $5000$。

输出格式

对于每组测试数据,输出如下内容: 第一行输出一个整数 $V$,表示僵尸巢穴多边形的顶点数。接下来的 $V$ 行,每行输出两个整数,表示多边形顶点的坐标,按顺时针顺序排列,且起点为字典序最小的顶点。

说明/提示

保证解一定存在且唯一。保证正确解中多边形顶点的坐标都在 $2$ 到 $N-2$ 之间。若顶点 $(x_1, y_1)$ 字典序小于顶点 $(x_2, y_2)$,当且仅当 $x_1 < x_2$ 或 $x_1 = x_2$ 且 $y_1 < y_2$。 由 ChatGPT 4.1 翻译