QOJ.ac

QOJ

时间限制: 1 s 内存限制: 256 MB 总分: 100

#115. 栅栏

统计

JOI 先生在 IOI 国拥有一块很大的土地。IOI 国由一个坐标平面表示,X 轴和 Y 轴相互垂直。坐标为 $(x, y)$ 的点表示 X 坐标为 $x$、Y 坐标为 $y$ 的点。他的土地是 X 坐标和 Y 坐标均在 $-10^{100}$ 到 $10^{100}$(含边界)之间的区域。他在牧场中饲养奶牛,牧场是 X 坐标和 Y 坐标均在 $-S$ 到 $S$(含边界)之间的区域。

JOI 先生决定用一些栅栏围住牧场以圈养奶牛。栅栏由长度为正实数的线段表示。他将以这样一种方式围住牧场:即从牧场内部的任何一点出发,如果不经过任何存在栅栏的点(包括栅栏的端点),就无法到达他土地的外部。土地中已经存在一些栅栏,他可以利用这些栅栏来围住牧场。对于这些栅栏中的任意两条,如果它们有公共点,则该点至少是其中一条栅栏的端点。

JOI 先生可以建造任意数量的新栅栏。新栅栏可以是任意长度和任意方向,只要它既不穿过牧场内部,也不超出他的土地范围即可。他可以建造沿着牧场边界的栅栏。建造长度为 $l$ ($l > 0$) 的新栅栏成本为 $l$。两条栅栏可能会相交,一个栅栏的端点可能与另一个栅栏的端点重合,或者一个栅栏的端点可能位于另一个栅栏上。

JOI 先生希望以尽可能低的成本围住牧场。

题目描述

给定牧场的大小和已建栅栏的数据,编写一个程序计算围住牧场所需的最小总成本。

输入格式

从标准输入读取以下数据。

  • 第一行包含两个空格分隔的整数 $N$ 和 $S$。这意味着牧场是 X 坐标和 Y 坐标均在 $-S$ 到 $S$(含边界)之间的区域,且 JOI 先生的土地上已经有 $N$ 个栅栏。
  • 接下来的 $N$ 行中的第 $i$ 行($1 \le i \le N$)包含四个空格分隔的整数 $A_i, B_i, C_i$ 和 $D_i$。这意味着第 $i$ 个已建栅栏是连接点 $(A_i, B_i)$ 和 $(C_i, D_i)$ 的线段。

输出格式

输出一行到标准输出。输出应包含围住牧场所需的最小总成本。你可以输出小数点后的任意位数,但你的输出与正确答案之间的绝对误差必须不超过 $0.01$。

数据范围

所有输入数据满足以下条件:

  • $1 \le N \le 100$
  • $1 \le S \le 200$
  • $-200 \le A_i \le 200$ ($1 \le i \le N$)
  • $-200 \le B_i \le 200$ ($1 \le i \le N$)
  • $-200 \le C_i \le 200$ ($1 \le i \le N$)
  • $-200 \le D_i \le 200$ ($1 \le i \le N$)
  • $(A_i, B_i) \neq (C_i, D_i)$ ($1 \le i \le N$)
  • 输入中的栅栏均不穿过牧场内部。
  • 对于输入中任意两条不同的栅栏,如果它们有公共点,则该点至少是其中一条栅栏的端点。

子任务

共有 3 个子任务。各子任务的分数和附加限制如下:

子任务 1 [18 分]

  • $N = 1$

子任务 2 [33 分]

  • $N \le 6$

子任务 3 [49 分]

  • 无附加限制。

样例

样例输入 1

3 4
-3 5 1 8
-4 3 -4 6
5 1 7 2

样例输出 1

29.0000000000

样例输入 2

1 2
-3 -3 -3 -2

样例输出 2

16.0000000000

说明 2

注意,完全不使用已建栅栏也是可以的。

样例输入 3

4 3
4 -1 3 4
-4 2 -2 4
-4 0 -5 6
0 -6 5 -2

样例输出 3

14.1392801789

样例输入 4

10 80
175 95 60 -146
-106 57 18 185
190 -68 177 -142
84 -195 127 -179
34 143 126 69
-92 133 -190 80
-157 -66 -119 -161
-85 -124 129 -171
141 181 175 175
107 -38 150 148

样例输出 4

238.4778364511

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
EditorialOpen Official EditorialQingyu- Download

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.