问题描述
有一个尺寸为L×L×L的立方体容器。进行将球放入容器的游戏。
容器内的点用直角坐标系表示,容器的顶点坐标之一为(0,0,0),最远顶点的坐标为(L,L,L)。
可以放入容器中的球共有N个,分别称为球1、球2、...、球N。球i的半径为Ri。
从这些球中任选球,并将它们分别放置在容器内的整数坐标位置(即球心处于整数坐标位置)。
此时,球可以悬浮在空中,但不能让球溢出容器,球之间也不能重叠(球与容器或球与球可以相切)。
对于球的布局,根据以下总和计算你的得分。
- 基础分:球i具有基础分Pi,将球i放置在容器内可得到Pi分。
- 奖励分:给定了M对最好放置在附近的球。具体来说,给定了M个四元组(Ai,Bi,Ci,Di)。这些四元组分别表示当将球Ai和球Bi放置在容器内使得它们的中心之间的欧几里得距离不超过Ci时,可得到Di分。(禁止以距离超过Ci的方式放置球)
考虑布局使得可以获得尽可能多的分数。无需求出最优解。
约束条件
- L=1000
- N=1000
- M=100000
- 1≤Ri≤200
- 1≤Pi≤80000
- 1≤Ai<Bi≤N
- 1≤Ci≤600
- 1≤Di≤80000
- 输入中的所有值都是整数。
输入
输入以以下格式给出。
L N M
R1 P1
R2 P2
:
RN PN
A1 B1 C1 D1
A2 B2 C2 D2
:
AM BM CM DM
输出
将球i的中心坐标表示为(Xi,Yi,Zi),以以下格式输出。如果球的中心不在容器内,则将其坐标表示为(−1,−1,−1)。
X1 Y1 Z1
X2 Y2 Z2
:
XN YN ZN
以下情况将被判定为_Wrong Answer_。
- 输出格式错误(包括Xi,Yi,Zi不是整数的情况)。
- 球溢出容器。即对于放置在容器中的球i,满足Xi−Ri, Yi−Ri, Zi−Ri中至少一个小于0,或者满足Xi+Ri, Yi+Ri, Zi+Ri中至少一个大于L。
- 球之间重叠。即对于放置在容器中的两个球i,j(i<j),满足球i和j的中心之间的欧几里得距离小于Ri+Rj。
输入生成
无需详细理解本部分内容。
每个球i的参数确定如下:
- 球i的半径Ri在1到200之间的整数中随机确定。
- 基础分Pi在1到max(1,Ri3/100)之间的整数中随机确定。
此外,第i个奖励点的参数确定如下:
- Ai,Bi是随机确定的1到N之间的2个整数。如果选择相同的值,则重新选择。然后,如果Ai>Bi,则交换Ai和Bi的值。
- Ci是从RAi+RBi+1到RAi+RBi+200之间的整数中随机确定。
- Di是从1到2RAiRBi之间的整数中随机确定。
评分
在单个测试用例中得分按照问题描述中所述的基础分和奖励分的总和计算。
共有50个测试用例,所有测试用例的分数总和即为提交的得分。
另外,如果在除了example_01以外的任何一个测试用例中输出被判定为_Wrong Answer_,则除了example_01之外的所有测试用例的得分都为0。
示例代码(C++)
示例代码
可以直接提交此代码。
输入示例
输入输出示例(zip)