QOJ.ac

QOJ

時間限制: 6.0 s 記憶體限制: 1024 MB 總分: 100

#10031. 1 :eye: > 100 :ear:

统计

你是否曾好奇过如何生成一个“随机”的非凸多边形?一种方法是使用 ifsmirnov 的算法。你可以在这里阅读相关内容:https://codeforces.com/blog/entry/63058#comment-472683。该算法说明如下:

设 $n$ 为多边形的顶点数。我们在正方形 $[0-10^5] \times [0-10^5]$ 内随机生成 $n$ 个点 $p_1, p_2, \dots, p_n$,方法如下:

  • 对于每个点,我们从 $0$ 到 $10^5$ 之间的整数均匀分布中选择 $x$ 和 $y$;
  • 如果当前点位于之前生成的任意两点所构成的直线上,则重新生成其坐标,直到它不位于任何此类直线上。

之后,我们为这些点构建一棵最小生成树,并以深度优先顺序遍历该树;当我们第一次访问一个顶点时,记录下它的编号。这个编号序列代表了这些点上的某个哈密顿回路。

接下来,我们在该回路中每对相邻点之间画一条线段。只要至少存在两条相交的线段,我们就通过交换线段端点来修复这种相交:如果相交的线段由点 $p_i, p_{i+1}$ 和 $p_j, p_{j+1}$ 构成,则擦除这些线段,并在 $p_i$ 和 $p_j$ 之间以及 $p_{i+1}$ 和 $p_{j+1}$ 之间各画一条线段。据信此过程最终会停止。

你可以下载生成器源代码以在本地生成一些样例。为此,请在 Yandex.Contest 系统中该题目的题目描述和提交表单之间,使用“Download problem statement”链接下载压缩包。

在那里,你将找到文件 gen.cppjngen.h。运行以下命令:

  • g++ gen.cpp -o gen
  • ./gen -n 1000 <seed>

参数 <seed> 可能包含数字、字母、空格和一些标点符号。

本题的具体要求如下:给定两个非凸多边形,它们均由 ifsmirnov 的算法生成。求它们的闵可夫斯基和(Minkowski sum)的面积。

两个多边形的闵可夫斯基和定义如下:如果点 $(x_1, y_1)$ 位于第一个多边形内部或边界上,且点 $(x_2, y_2)$ 位于第二个多边形内部或边界上,则点 $(x_1 + x_2, y_1 + y_2)$ 属于它们的闵可夫斯基和。

输入格式

第一行包含一个整数 $n$ ($n = 10^3$):第一个多边形的顶点数。接下来的 $n$ 行包含其点的坐标 $x_i, y_i$ ($0 \le x_i, y_i \le 10^5$),按遍历顺序(顺时针或逆时针)给出。

下一行包含一个整数 $m$ ($m = 10^3$):第二个多边形的顶点数。接下来的 $m$ 行包含其点的坐标 $x_i, y_i$ ($0 \le x_i, y_i \le 10^5$),按遍历顺序(顺时针或逆时针)给出。

每个多边形都是非凸的,没有自交,且不存在任意三点共线的情况。

输出格式

输出一个数字,即两个多边形的闵可夫斯基和的面积。如果你的答案的相对误差不超过 $10^{-4}$,则被视为正确。

样例

输入 1

./gen -n 1000 sample

输出 1

38851658799.3

说明

为确保无误,样例以以下内容开头:

1000
28481 58236
26391 26391
33364 59290
...

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.