#caddi2019a. [caddi2019_a]球の詰め込み

[caddi2019_a]球の詰め込み

问题描述

有一个尺寸为L×L×LL × L × L的立方体容器。进行将球放入容器的游戏。

容器内的点用直角坐标系表示,容器的顶点坐标之一为(0,0,0)(0, 0, 0),最远顶点的坐标为(L,L,L)(L, L, L)

可以放入容器中的球共有NN个,分别称为球11、球22、...、球NN。球ii的半径为RiR_i

从这些球中任选球,并将它们分别放置在容器内的整数坐标位置(即球心处于整数坐标位置)。

此时,球可以悬浮在空中,但不能让球溢出容器,球之间也不能重叠(球与容器或球与球可以相切)。

对于球的布局,根据以下总和计算你的得分。

  • 基础分:球ii具有基础分PiP_i,将球ii放置在容器内可得到PiP_i分。
  • 奖励分:给定了MM对最好放置在附近的球。具体来说,给定了MM个四元组(Ai,Bi,Ci,Di)(A_i, B_i, C_i, D_i)。这些四元组分别表示当将球AiA_i和球BiB_i放置在容器内使得它们的中心之间的欧几里得距离不超过CiC_i时,可得到DiD_i分。(禁止以距离超过CiC_i的方式放置球)

考虑布局使得可以获得尽可能多的分数。无需求出最优解。

约束条件

  • L=1000L = 1000
  • N=1000N = 1000
  • M=100000M = 100000
  • 1Ri2001 ≤ R_i ≤ 200
  • 1Pi800001 ≤ P_i ≤ 80000
  • 1Ai<BiN1 ≤ A_i < B_i ≤ N
  • 1Ci6001 ≤ C_i ≤ 600
  • 1Di800001 ≤ D_i ≤ 80000
  • 输入中的所有值都是整数。

输入

输入以以下格式给出。

LL NN MM R1R_1 P1P_1 R2R_2 P2P_2 :: RNR_N PNP_N A1A_1 B1B_1 C1C_1 D1D_1 A2A_2 B2B_2 C2C_2 D2D_2 :: AMA_M BMB_M CMC_M DMD_M

输出

将球ii的中心坐标表示为(Xi,Yi,Zi)(X_i, Y_i, Z_i),以以下格式输出。如果球的中心不在容器内,则将其坐标表示为(1,1,1)(-1, -1, -1)

X1X_1 Y1Y_1 Z1Z_1 X2X_2 Y2Y_2 Z2Z_2 :: XNX_N YNY_N ZNZ_N

以下情况将被判定为_Wrong Answer_。

  • 输出格式错误(包括Xi,Yi,ZiX_i, Y_i, Z_i不是整数的情况)。
  • 球溢出容器。即对于放置在容器中的球ii,满足XiRiX_i - R_i, YiRiY_i - R_i, ZiRiZ_i - R_i中至少一个小于00,或者满足Xi+RiX_i + R_i, Yi+RiY_i + R_i, Zi+RiZ_i + R_i中至少一个大于LL
  • 球之间重叠。即对于放置在容器中的两个球iijji<ji < j),满足球iijj的中心之间的欧几里得距离小于Ri+RjR_i + R_j

输入生成

无需详细理解本部分内容。

每个球ii的参数确定如下:

  • ii的半径RiR_i11200200之间的整数中随机确定。
  • 基础分PiP_i11max(1,Ri3/100)\max(1,R_i^3/100)之间的整数中随机确定。

此外,第ii个奖励点的参数确定如下:

  • Ai,BiA_i, B_i是随机确定的11NN之间的22个整数。如果选择相同的值,则重新选择。然后,如果Ai>BiA_i > B_i,则交换AiA_iBiB_i的值。
  • CiC_i是从RAi+RBi+1R_{A_i} + R_{B_i} + 1RAi+RBi+200R_{A_i} + R_{B_i} + 200之间的整数中随机确定。
  • DiD_i是从112RAiRBi2R_{A_i}R_{B_i}之间的整数中随机确定。

评分

在单个测试用例中得分按照问题描述中所述的基础分和奖励分的总和计算。

共有50个测试用例,所有测试用例的分数总和即为提交的得分。

另外,如果在除了example_01以外的任何一个测试用例中输出被判定为_Wrong Answer_,则除了example_01之外的所有测试用例的得分都为0。

示例代码(C++)

示例代码

可以直接提交此代码。

输入示例

输入输出示例(zip)