Java实现第九届蓝桥杯三体攻击

三体攻击

【题目描述】
三体人将对地球发起攻击。为了抵御攻击,地球人派出了 A × B × C 艘战舰,在太空中排成一个 A 层 B 行 C 列的立方体。其中,第 i 层第 j 行第 k 列的战舰(记为战舰 (i, j, k))的生命值为 d(i, j, k)。

三体人将会对地球发起 m 轮“立方体攻击”,每次攻击会对一个小立方体中的所有战舰都造成相同的伤害。具体地,第 t 轮攻击用 7 个参数 lat, rat, lbt, rbt, lct, rct, ht 描述;
所有满足 i ∈ [lat, rat],j ∈ [lbt, rbt],k ∈ [lct, rct] 的战舰 (i, j, k) 会受到 ht 的伤害。如果一个战舰累计受到的总伤害超过其防御力,那么这个战舰会爆炸。

地球指挥官希望你能告诉他,第一艘爆炸的战舰是在哪一轮攻击后爆炸的。

【输入格式】
从标准输入读入数据。
第一行包括 4 个正整数 A, B, C, m;
第二行包含 A × B × C 个整数,其中第 ((i − 1)×B + (j − 1)) × C + (k − 1)+1 个数为 d(i, j, k);
第 3 到第 m + 2 行中,第 (t − 2) 行包含 7 个正整数 lat, rat, lbt, rbt, lct, rct, ht。

【输出格式】
输出到标准输出。
输出第一个爆炸的战舰是在哪一轮攻击后爆炸的。保证一定存在这样的战舰。

【样例输入】
2 2 2 3
1 1 1 1 1 1 1 1
1 2 1 2 1 1 1
1 1 1 2 1 2 1
1 1 1 1 1 1 2

【样例输出】
2

【样例

  • 19
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 32
    评论
可以使用Python的matplotlib库来实现三体运动的可视化。首先,需要定义三个质点的初始位置、速度和质量等参数,然后使用牛顿万有引力定律计算它们之间的相互作用力,再根据牛顿第二定律计算它们的加速度,最后使用欧拉法或者其他数值积分方法来更新它们的位置和速度。以下是一个简单的示例代码: ```python import numpy as np import matplotlib.pyplot as plt # 定义三个质点的初始参数 m1, m2, m3 = 1, 1, 1 x1, y1, vx1, vy1 = -1, 0, 0, 0.5 x2, y2, vx2, vy2 = 1, 0, 0, -0.5 x3, y3, vx3, vy3 = 0, np.sqrt(3), -0.5, 0 # 定义时间步长和总时间 dt = 0.01 t = np.arange(0, 10, dt) # 定义牛顿万有引力定律 def force(x1, y1, x2, y2, m1, m2): r = np.sqrt((x1-x2)**2 + (y1-y2)**2) f = m1 * m2 / r**2 fx = f * (x2-x1) / r fy = f * (y2-y1) / r return fx, fy # 定义欧拉法更新位置和速度的函数 def update(x1, y1, vx1, vy1, x2, y2, vx2, vy2, x3, y3, vx3, vy3, dt): fx12, fy12 = force(x1, y1, x2, y2, m1, m2) fx13, fy13 = force(x1, y1, x3, y3, m1, m3) fx23, fy23 = force(x2, y2, x3, y3, m2, m3) ax1, ay1 = (fx12+fx13) / m1, (fy12+fy13) / m1 ax2, ay2 = (-fx12+fx23) / m2, (-fy12+fy23) / m2 ax3, ay3 = (-fx13-fx23) / m3, (-fy13-fy23) / m3 x1, y1, vx1, vy1 = x1+vx1*dt, y1+vy1*dt, vx1+ax1*dt, vy1+ay1*dt x2, y2, vx2, vy2 = x2+vx2*dt, y2+vy2*dt, vx2+ax2*dt, vy2+ay2*dt x3, y3, vx3, vy3 = x3+vx3*dt, y3+vy3*dt, vx3+ax3*dt, vy3+ay3*dt return x1, y1, vx1, vy1, x2, y2, vx2, vy2, x3, y3, vx3, vy3 # 循环更新位置和速度,并绘制轨迹 for i in range(len(t)): x1, y1, vx1, vy1, x2, y2, vx2, vy2, x3, y3, vx3, vy3 = update(x1, y1, vx1, vy1, x2, y2, vx2, vy2, x3, y3, vx3, vy3, dt) plt.plot(x1, y1, 'ro', markersize=3) plt.plot(x2, y2, 'bo', markersize=3) plt.plot(x3, y3, 'go', markersize=3) plt.show() ``` 这段代码使用了欧拉法来更新位置和速度,因此可能存在数值误差和能量不守恒等问题。如果需要更精确的模拟,可以使用其他数值积分方法,比如四阶龙格-库塔法。
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值