QOJ.ac

QOJ

حد الوقت: 1 s حد الذاكرة: 64 MB مجموع النقاط: 100

#2049. 继承球体

الإحصائيات

在 2xxx 年,一支探险队降落在一颗行星上,发现了一些由该行星上的古代物种制造的奇异物体。它们是包含不透明实心球体的透明盒子(图 12)。此外还有许多石版,上面似乎记录了球体的位置和半径。

图 12:一个奇异物体

起初,它们的目的尚不清楚,但 Zambendorf 教授发现,由水平平面形成的横截面起着重要作用。例如,通过从下往上滑动平面,物体的横截面会发生如图 13 所示的变化。

图 13:不同位置的横截面

他最终发现,某些信息是通过横截面中连通图形数量的变化来表达的,其中每个连通图形都是相交或相切的圆盘的并集,而每个圆盘都是相应实心球体的横截面。例如,在图 13 中(其几何结构在稍后的第一个样例数据集中描述),连通图形的数量在 $z = 0.0000, 162.0000, 167.0000, 173.0004, 185.0000, 191.9996, 198.0000, 203.0000$ 和 $205.0000$ 处分别变化为 $0, 1, 2, 1, 2, 3, 2, 1$ 和 $0$。通过为增加分配 $1$,为减少分配 $0$,该序列的变化可以用一个 8 位二进制数 $11011000$ 来表示。

为了辅助进一步分析,请编写一个程序,确定当水平平面从底部 ($z = 0$) 滑动到顶部 ($z = 36000$) 时,连通图形数量的变化。

输入格式

输入包含一系列数据集。每个数据集以一行包含一个正整数开始,表示数据集中的球体数量 $N$。随后是 $N$ 行,描述球体的中心和半径。这 $N$ 行中的每一行都有四个正整数 $X_i, Y_i, Z_i$ 和 $R_i$ ($i = 1, \dots, N$),分别描述第 $i$ 个球体的中心坐标和半径。

你可以假设 $1 \le N \le 100$,$1 \le R_i \le 2000$,$0 < X_i - R_i < X_i + R_i < 4000$,$0 < Y_i - R_i < Y_i + R_i < 16000$,以及 $0 < Z_i - R_i < Z_i + R_i < 36000$。每个实心球体定义为满足 $(x - X_i)^2 + (y - Y_i)^2 + (z - Z_i)^2 \le R_i^2$ 的所有点 $(x, y, z)$ 的集合。

一个球体可能包含其他球体。没有两个球体是相互切的。任意两个球体相交形成的圆的最小/最大 $z$ 坐标与任何 $Z_i \pm R_i$ 之间的差值至少为 $0.01$。

输入的结尾由一行包含一个零表示。

输出格式

对于每个数据集,你的程序应输出两行。第一行应包含一个整数 $M$,表示变化的次数。第二行应包含一个 $M$ 位的二进制数,表示如上所述的连通图形数量的变化。

样例

输入 1

3
95 20 180 18
125 20 185 18
40 27 195 10
1
5 5 5 4
2
5 5 5 4
5 5 5 3
2
5 5 5 4
5 7 5 3
16
2338 3465 29034 710
1571 14389 25019 842
1706 8015 11324 1155
1899 4359 33815 888
2160 10364 20511 1264
2048 8835 23706 1906
2598 13041 23679 618
1613 11112 8003 1125
1777 4754 25986 929
2707 9945 11458 617
1153 10358 4305 755
2462 8450 21838 934
1822 11539 10025 1639
1473 11939 12924 638
1388 8519 18653 834
2239 7384 32729 862
0

输出 1

8
11011000
2
10
2
10
2
10
28
1011100100110101101000101100

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.