QOJ.ac

QOJ

Time Limit: 10 s Memory Limit: 1024 MB Total points: 100

#6374. LaLa与魔法阵 (LiLi版)

Statistics

LaLa 的实验室里有一堆“魔法圆”。

一个魔法圆可以用一种特殊墨水绘制的简单多边形来表示,如果它是凸的,即其所有内角均小于或等于 $\pi$,则称其为“可用”的。

LaLa 计划将每个魔法圆都变成可用的。然而,如果操作不当,它们可能会失去所有的魔法力量。幸运的是,LaLa 有一个完美的魔法工具来处理这个问题。

该工具的工作原理如下:当你放入一个魔法圆时,如果该圆是可用的,工具会报告它是可用的。否则,它会选取两个不同的点 $u$ 和 $v$,使得:

  • $u$ 和 $v$ 位于魔法圆凸包的边界上,且
  • 从 $u$ 到 $v$ 沿魔法圆边界逆时针方向的路径上,除了 $u$ 和 $v$ 之外,没有任何点位于魔法圆凸包的边界上。

然后,它将 $u-v$ 路径绕 $u$ 和 $v$ 的中点旋转 $\pi$。换句话说,对于 $u-v$ 路径上的每个点 $w$,$w$ 变为 $u + v - w$,其中加法是在绘制魔法圆的纸张所在的二维坐标系上按坐标进行的。注意,此修改的结果也是一个简单多边形。

LaLa 不知道的是,她的妹妹 LiLi 偷听了 LaLa 的计划。LiLi 知道 LaLa 有多懒,为了恶作剧,LiLi 会偷偷放入一个需要大量使用该工具才能使其可用的魔法圆。更具体地说,LiLi 会在堆中添加一个魔法圆,它是最多 $1\,000$ 条线段的并集,并且该工具可以通过 $120\,000$ 到 $1\,000\,000$ 次修改操作将其变为一个可用的魔法圆。

请编写一个程序来帮助 LiLi 计算出这样一个魔法圆。

输出格式

输出应采用以下格式:

$N$ $x_0 \ y_0$ $x_1 \ y_1$ $\vdots$ $x_{N-1} \ y_{N-1}$ $Q$ $a_0 \ b_0 \ c_0 \ d_0$ $a_1 \ b_1 \ c_1 \ d_1$ $\vdots$ $a_{Q-1} \ b_{Q-1} \ c_{Q-1} \ d_{Q-1}$

其中,初始魔法圆是连接点 $(x_i, y_i)$ 和 $(x_{(i+1 \bmod N)}, y_{(i+1 \bmod N)})$ 的 $N$ 条线段的并集(对于所有整数 $0 \le i < N$),并且它有一系列长度为 $Q$ 的工具修改操作,其中第 $i$ 次修改选择了从点 $(a_i, b_i)$ 到 $(c_i, d_i)$ 的逆时针路径。

输出必须满足以下约束:

  • 输出中的所有数字均为整数。
  • $3 \le N \le 1\,000$
  • $120\,000 \le Q \le 1\,000\,000$
  • 对于所有整数 $0 \le i < N$ 和 $0 \le j < Q$,满足 $0 \le x_i, y_i, a_j, b_j, c_j, d_j \le 1\,000\,000\,000$。
  • 对于所有整数 $0 \le i < j < N$,满足 $x_i \neq x_j$ 或 $y_i \neq y_j$。
  • 对于所有整数 $0 \le i < Q$,满足 $a_i \neq c_i$ 或 $b_i \neq d_i$。
  • 点序列 $(x_0, y_0), (x_1, y_1), \dots, (x_{N-1}, y_{N-1})$ 定义了一个简单多边形的逆时针遍历。
  • 对于所有整数 $0 \le i < Q$,在第 $i$ 次修改后,选择从 $(a_i, b_i)$ 到 $(c_i, d_i)$ 的逆时针路径进行修改是有效的。
  • 最终的魔法圆是可用的。

注意,允许两条连续的线段以 $\pi$ 的角度相交。另请注意,不需要最小化任何数字,你的程序只需满足所有输出约束即可。

样例

输入 1

(无)

输出 1

8
1 0
4 0
6 0
3 1
5 2
2 1
6 3
0 2
4
6 0 6 3
10 2 6 3
10 2 9 4
9 4 0 2

说明

请注意,上述样例输出不满足 $120\,000 \le Q \le 1\,000\,000$ 的条件,因此提交后会得到 Wrong Answer 判决。它仅用于展示输出格式。

下图展示了样例输出的初始魔法圆:

下图展示了使用该工具使其可用的操作序列。边界的虚线部分是工具修改的路径,修改后变为红色部分。

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.