P4671 [BalticOI 2011] Polygon (Day2)

题目描述

在一个无限的矩形网格上画了一个有 $N$ 个顶点的简单多边形。对于这样的多边形,只有相邻的边在它们的公共顶点处相接;没有其他边相交或接触。多边形的所有顶点都位于网格点上,即顶点具有整数坐标。 你的任务是找到严格位于给定多边形内部的网格线段的总长度(这些线段在下面的图中被高亮显示)。

输入格式

输入的第一行包含一个整数 $N$,表示多边形的顶点数。接下来的 $N$ 行中的每一行包含两个整数 $x$ 和 $y$,表示一个顶点的坐标。顶点按顺时针或逆时针顺序给出。所有顶点都是不同的,但可能有多个连续的顶点位于一条线上。

输出格式

输出的唯一一行必须包含一个小数:严格位于给定多边形内部的网格线段的总长度。

说明/提示

**样例解释 1** 水平线的长度是 $\frac{4}{3} + \frac{8}{3} = 4$。垂直线的长度是 $3 + 2 + 1 = 6$。总长度是 $4 + 6 = 10$。 **样例解释 2** 水平线的长度是 $1+2+4 = 7$。垂直线的长度是 $\frac{9}{4}+\frac{3}{2}+\frac{7}{4} = 5.5$。总长度是 $7 + 5.5 = 12.5$。 **数据范围** 对于 $50\%$ 的数据,多边形的所有边均在网格线上。 对于所有数据,$3 \le N \le 10^5,-5 \times 10^8 \le x,y \le 5 \times 10^8$。 题面翻译由 ChatGPT-4o 提供。