QOJ.ac

QOJ

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

#2406. 韦恩区间

Statistics

Venn 区间图是一种在 1D 空间中展示集合交集的图形化方法,类似于更为常见的 2D Venn 图。Venn 区间图的定义是为每个集合 $S_i$ 分配一个非零长度的整数区间 $[l_i, u_i)$。不同区间重叠的区域对应于不同集合组合的交集(见图 N.1)。

图 N.1:对应于样例输入 1 的 Venn 区间图。分配给六个集合 A 到 F 的区间显示在顶部;图中编码的区域沿着数轴标注。该 Venn 区间图有九个区域,且是非退化的(因为没有任何区间包含在另一个区间内)。

更正式地说,给定分配给每个集合的区间,你可以通过以下算法计算 Venn 区间图中出现的区域:

  • 将所有区间的起点 $l_i$ 和终点 $u_i$ 合并为一个集合,并对它们进行排序,得到一个整数序列 $p_1 < p_2 < \dots < p_m$。
  • 对于每个跨越连续 $p$ 值的区间 $(p_j, p_{j+1})$,用所有满足 $(p_j, p_{j+1}) \subseteq [l_i, u_i)$ 的集合 $S_i$ 对其进行标记。(注意:不存在部分重叠的情况:$p$-区间要么完全包含在每个集合区间内,要么与之不相交)。
  • 所有非空标签的集合即为 Venn 区间图的区域。每个标签 $\{S_a, S_b, \dots\}$ 代表集合 $S_a \cap S_b \cap \dots$ 的交集。

在上述示例 Venn 区间图中,有六个集合(A 到 F)和九个区域($B, A \cap B, A, A \cap C, A \cap C \cap D, C \cap D, D, E$ 和 $F$)。这个示例 Venn 区间图有一个“空洞”,即没有任何集合重叠的地方(在区域 D 的末尾和 E 的起点之间);这是允许的。还要注意 $E \cap F$ 不是一个区域:E 和 F 的区间在端点处接触,但它们在 $p$-区间上并不重叠。

并非每个区域列表都有对应的 Venn 区间图插图。例如,考虑区域 $A \cap B, B \cap C$ 和 $C \cap A$。无法在实线上布置 A、B 和 C 的区间来精确形成这三个区域(任何包含这三个区域的 Venn 区间图也必须包含 $A \cap B \cap C$)。此外,如果任何区间包含在另一个区间内,即对于某些 $i \neq j$ 满足 $l_i \le l_j$ 且 $u_j \le u_i$,则 Venn 区间图是退化的。例如,如果 C 的右端点在 4 而不是 5,图 N.1 中的 Venn 区间图就会变成退化的,因为分配给集合 C 的区间将被包含在 A 的区间内(对应于样例输入 3)。

给定一个区域列表,构造一个包含恰好这些区域的非退化 Venn 区间图(如果可能)。

输入格式

第一行包含一个整数 $n$,表示图中所需的区域数量($1 \le n \le 4\,000$)。接下来的 $n$ 行每行描述一个区域。每行以一个整数 $k$ 开头,表示形成该区域的集合数量($1 \le k \le 2\,000$),随后是 $k$ 个以空格分隔的集合名称。每个集合名称仅包含小写或大写字母(a-z, A-Z),且名称长度不超过十个字符。同一行中列出的所有集合名称都是不同的,且没有两个区域列出完全相同的集合名称集合。所有区域中总共出现的唯一集合名称不超过 $2\,000$ 个。

输出格式

如果不存在满足输入要求的非退化 Venn 区间图,则输出 IMPOSSIBLE 且不再输出其他内容。

否则,打印描述任意一个有效图的区间。对于输入中出现的每个集合名称,打印一行输出,以该集合名称开头,后跟两个以空格分隔的整数 $l$ 和 $r$:即分配给该集合名称的区间的左端点和右端点。端点必须满足 $-10^6 \le l < u \le 10^6$。你可以按任意顺序列出集合,但输入中出现的每个集合名称必须对应恰好一行输出。

输入中的每个区域必须在你的 Venn 区间图中至少出现一次,且你的图中不得包含输入中未指定的任何其他区域。你的图必须是非退化的:没有任何区间应被包含在另一个区间内。

样例

样例输入 1

9
1 A
2 A B
1 B
2 A C
3 A C D
2 C D
1 D
1 E
1 F

样例输出 1

B -1 1
A 0 4
C 2 5
D 3 6
E 7 8
F 8 9

样例输入 2

3
2 A B
2 B C
2 C A

样例输出 2

IMPOSSIBLE

样例输入 3

8
1 A
2 A B
1 B
2 A C
3 A C D
1 D
1 E
1 F

样例输出 3

IMPOSSIBLE

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.