QOJ.ac

QOJ

実行時間制限: 1 s メモリ制限: 2048 MB 満点: 100

#1978. 刺穿数

統計

直方图是一个简单的直角多边形 $H$(即每个顶点的内角均为 $90^\circ$ 或 $270^\circ$),且其有一条水平边能“看到” $H$ 内部(即内部或边界上)的每一个点 $q$。在此,如果存在一条位于 $H$ 内部且连接边 $e$ 与点 $q$ 的垂直线段 $s$,则称边 $e$ 能看到点 $q \in H$。

令 $H$ 为一个具有 $n$ 个顶点的直方图,考虑将 $H$ 分解为若干个边平行于坐标轴的矩形 $R$。矩形的顶点不一定必须是 $H$ 的顶点:允许在 $H$ 的边界上和/或其内部引入额外的顶点。对于这样的分解 $R$,一条位于 $H$ 内部的水平或垂直线段 $s$ 的“刺穿数”(stabbing number)是指其内部(不仅仅是边界)被 $s$ 穿过的来自 $R$ 的矩形数量。分解 $R$ 的刺穿数定义为所有位于 $H$ 内部的水平或垂直线段 $s$ 中,刺穿数的最大值。目标是计算出一个刺穿数最小的分解 $R$。

输入格式

输入的第一行包含两个正整数 $m$ 和 $n$ ($1 \leqslant m, n \leqslant 50$),分别表示描述直方图的表格的行数和列数。接下来的 $m$ 行,每行包含恰好 $n$ 个字符。“”表示直方图的边界,其余部分用点(“.”)填充。直方图的每条边至少包含三个“”。你可以假设给定的直方图至少有 4 条边,最多有 16 条边,且边不会重叠、相交或接触;即每个“”恰好与另外两个“”字符相邻。

输出格式

输出给定直方图的最小刺穿数。

样例

输入 1

10 13
.....****....
.....*..*....
.....*..***..
.....*....*..
.....*....***
...***......*
...*........*
****........*
*...........*
*************

输出 1

2

输入 2

8 15
...............
.........*****.
....***..*...*.
....*.*..*...*.
.****.****...*.
.*...........*.
.*************.
...............

输出 2

2

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.