AT_ahc039_a [AHC039A] Purse Seine Fishing
题目描述
在一个二维平面上,给定 $N$ 条鲭鱼和 $N$ 条鯵鱼。你的任务是设计一个多边形,使得其内部包含的鲭鱼数量减去鯵鱼数量的差值最大。此外,位于多边形边界上的点也被视为在多边形内部。
输入格式
输入通过标准输入提供,格式如下:
> $ N $ $ x_0 $ $ y_0 $ $ \cdots $ $ x_{2N-1} $ $ y_{2N-1} $
- 所有测试用例均固定鲭鱼和鯵鱼的数量 $N$ 为 5000。
- 对于每个 $i=0,1,\cdots,N-1$,$(x_i,y_i)$ 为第 $i$ 条鲭鱼的坐标。
- 对于每个 $i=0,1,\cdots,N-1$,$(x_{N+i},y_{N+i})$ 为第 $i$ 条鯵鱼的坐标。
- 每个坐标 $(x_i,y_i)$ 满足 $0 \leq x_i, y_i \leq 10^5$,且所有坐标互不相同。
输出格式
输出一个多边形,它的顶点数为 $m$($4 \leq m \leq 1000$)。设第 $i$ 个顶点的坐标为 $(a_i,b_i)$,请按以下格式打印到标准输出:
> $ m $ $ a_0 $ $ b_0 $ $ \cdots $ $ a_{m-1} $ $ b_{m-1} $
输出的顶点不必严格组成多边形的角度,即允许连续的三个顶点共线。但所有顶点坐标必须互不相同,顺序可以是顺时针或逆时针。
[查看示例](https://img.atcoder.jp/ahc039/KNtTkgAy.html?lang=ja&seed=0&output=sample)
可以多次输出解决方案,只有最后一次输出会被用于评分。利用 Web 版可视化工具可以对多个解进行比较。
说明/提示
### 条件
1. 多边形的顶点数不超过 1000,且边长的总和不超过 $4 \times 10^5$。
2. 每个顶点的坐标为整数并满足 $0 \leq x, y \leq 10^5$。
3. 每条边必须平行于 $x$ 轴或 $y$ 轴。
4. 多边形不能自交:非相邻边之间没有交点,相邻边之间只有一个公共顶点。
### 得分计算
假设输出的多边形内部包含的鲭鱼总数为 $a$,鯵鱼总数为 $b$,得分为 $\max(0, a-b+1)$。
### 输入数据生成方法
- $\mathrm{rand}(L,U)$:在 $L$ 到 $U$ 范围内生成一个整数。
- $\mathrm{rand\_double}(L,U)$:在 $L$ 到 $U$ 范围内生成一个实数。
- $\mathrm{normal}(\mu,\sigma)$:根据平均值 $\mu$ 和标准差 $\sigma$ 的正态分布生成一个随机实数。
首先生成鲭鱼的坐标。随机选择一个集群数量 $n = \mathrm{rand}(10, 25)$。对于每个集群 $i$,随机生成权重 $w_i = \mathrm{rand\_double}(0, 1)$,中心点 $(cx_i, cy_i) = (\mathrm{rand}(20000, 80000), \mathrm{rand}(20000, 80000))$ 和标准差 $\sigma_i = \mathrm{rand}(1000, 5000)$。重复生成 $N$ 条鲭鱼,每次根据权重随机选择一个集群,然后生成 $x = \mathrm{round}(\mathrm{normal}(cx_i, \sigma_i))$ 和 $y = \mathrm{round}(\mathrm{normal}(cy_i, \sigma_i))$。如果生成坐标满足条件且互不相同,则接��该坐标;否则重试。
鲭鱼生成完毕后,以同样的方法生成鯵鱼的坐标。
### 工具(输入生成器和可视化工具)
- [Web 版](https://img.atcoder.jp/ahc039/KNtTkgAy.html?lang=ja): 更高性能并支持动画显示。
- [本地版](https://img.atcoder.jp/ahc039/KNtTkgAy.zip): 需要 Rust 语言编译环境。
- [Windows 版编译好的程序](https://img.atcoder.jp/ahc039/KNtTkgAy_windows.zip): 如果不想设置 Rust 环境,可以使用此版本。
比赛期间请勿分享可视化结果或讨论解法。
**本翻译由 AI 自动生成**