#P12494. [NAC 2025] Polygon Partition
[NAC 2025] Polygon Partition
题目描述
简单多边形是指不自交且无洞的多边形。给定一个简单多边形的 个顶点 ,其中 , 和 分别是第 个顶点的 坐标和 坐标。顶点互不相同且按逆时针顺序给出(因此每对相邻顶点之间有一条边; 和 之间也有一条边)。
多边形的边界不经过任何格点(格点是指两个坐标均为整数的点)。此外,所有 和 的值均不为整数。
半整数点是指恰好有一个坐标为整数的点。设 为多边形边界上的所有半整数点。对于每个半整数点 ,令 为 的非整数坐标的下取整值。对于 的子集 ,定义 为 中所有点的 之和()。是否存在一种将 划分为两个子集 和 的方法,使得 ?
(两个集合 和 构成 的划分,当且仅当 且 。只要满足这两个条件且 ,对 和 没有其他限制。特别地,允许空集,且每个子集中的半整数点不必在多边形边界上连续。)
输入格式
第一行输入一个整数 (),表示多边形的顶点数。
接下来的 行,每行包含两个实数 和 (),表示多边形顶点的坐标,按逆时针顺序给出。每个坐标的小数部分恰好有 位,且不为整数。
保证多边形不自交、顶点互不相同,且多边形边界不经过任何格点。
输出格式
如果无解,输出 并结束。
否则,第一行输出一个整数 ,表示划分 后其中一个子集中的半整数点数量。接下来的 行,每行输出该子集中一个点的 值。
如果存在多个有效划分,可以任选其一。可以输出划分中的任意一个子集,且 值可以按任意顺序列出。
输入输出样例 #1
输入 #1
4
-0.950000 -0.850000
-0.100000 0.999999
0.111000 0.555000
-0.200000 1.600000
输出 #1
3
0
-1
-1
输入输出样例 #2
输入 #2
3
0.500000 0.700000
0.100000 0.200000
0.800000 0.900000
输出 #2
0
输入输出样例 #3
输入 #3
4
-360.000001 -24.000001
-359.999999 -24.000001
-359.999999 -23.999999
-360.000001 -23.999999
输出 #3
2
-25
-360
说明/提示
样例输入 1 对应的多边形如下图所示:
顶点标记为 。半整数点用橙色标出,从 开始逆时针依次标记为 。这些半整数点的 值依次为 。任何 之和为 的子集均为正确答案。样例输出 1 展示了一种可能的正确答案。
样例输入 2 的多边形边界未经过任何半整数点,因此 为空集,可以划分为两个空集,其 值均为零。