QOJ.ac

QOJ

시간 제한: 1.0 s 메모리 제한: 1024 MB 총점: 100

#18595. 皮克定理

통계

米尔科(Mirko)最近了解了皮克定理(Pick's theorem),该定理指出:在平面直角坐标系中,如果我们画一个顶点均为整点(坐标为整数的点)的多边形,设其面积为 $A$,内部整点数为 $i$,边界上(包括多边形顶点)的整点数为 $b$,则总是满足:

$$A = i + \frac{b}{2} - 1$$

为了测试这个定理,米尔科在他的智能白板上用磁性小棒拼接多边形。由于重力原因,这些小棒在夜里都滑落到了白板底部。现在,米尔科想要用他找到的所有小棒拼接出一个面积尽可能小的多边形。米尔科可以将小棒移动到白板上的任意位置,但不能旋转它们。米尔科拥有以下小棒:

  • $a$ 根长度为 $1$ 的水平小棒,
  • $b$ 根长度为 $1$ 的竖直小棒,
  • $c$ 根长度为 $\sqrt{2}$ 的对角线小棒,与 $x$ 轴正方向成 $45^\circ$ 角,
  • $d$ 根长度为 $\sqrt{2}$ 的对角线小棒,与 $x$ 轴正方向成 $135^\circ$ 角。

图 2:对于上方的多边形:$A = 8, i = 4, b = 10$。

图 3:米尔科拥有的小棒。

确定一个能由所有给定小棒拼接而成的、面积最小的多边形。你可以假设输入数据保证至少可以构造出一个这样的多边形。

此外,如果你使用所有给定的小棒构造出了一个合法的多边形(但不一定是面积最小的),也可以获得部分分数。更多细节请参考“评分”部分。

输入格式

输入的第一行包含四个整数 $a, b, c, d$,含义如题面所述。

输出格式

你必须输出 $n$ 行,其中 $n = a + b + c + d$。在第 $j$ 行中,输出整数 $x_j$ 和 $y_j$ —— 第 $j$ 个多边形顶点的坐标。多边形的第一个顶点必须是 $(0, 0)$,其余顶点可以按任意方向(顺时针或逆时针)依次输出。允许相邻的多边形边共线(平行),但多边形不能自交或自触。

评分

对于所有子任务,均满足 $0 \le a, b, c, d \le 100$ 且 $a + b + c + d \ge 3$。

子任务 分值 数据范围
1 5 $c = d = 0$
2 5 $a = b = 0$
3 10 $a + b + c + d \le 6$
4 10 $a + b + c + d \le 20$
5 10 $a + b + c + d \le 40$
6 10 $a + b + c + d \le 80$
7 10 $a + b + c + d \le 150$
8 10 $a + b + c + d \le 200$
9 10 $a + b + c + d \le 300$
10 20 无附加限制

如果对于某个测试点,你的程序没有输出一个由给定小棒构成的合法多边形,则该子任务得 $0$ 分。如果程序输出了一个合法多边形,但其面积不是最小的,则可以根据以下规则获得部分分数。

对于测试点 $j$,设 $r_j$ 为你得到的多边形面积与最小可能多边形面积的比值。对于子任务 $k$,设 $z_k$ 为该子任务中所有测试点 $j$ 的 $r_j$ 的最大值。该解法在子任务 $k$ 中获得的分数百分比 $P_k$ 取决于 $z_k$,具体计算方式如下:若 $z_k \ge 3$,则 $P_k = 10$;否则:

$$Pk = \frac{25}{8}(3 - z_k)^4 + 10$$

因此,根据所建多边形面积与最优面积的比值,非最优解在某个子任务中可以获得该子任务 $10\%$ 到 $60\%$ 的分数。

样例

输入样例 1

1 1 1 0

输出样例 1

0 0
1 1
0 1

输入样例 2

0 0 6 4

输出样例 2

0 0
1 1
2 2
3 3
2 4
1 3
0 2
-1 3
-2 2
-1 1

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.