#P1071. [2025 实验室三面] 核电,轻而易举啊!

[2025 实验室三面] 核电,轻而易举啊!

核融合炉にさ 飛び込んでみたいと思う

真っ青な光 包まれて奇麗

​ ——《炉心融解》

题目背景

GTNH(GT: New Horizons)是一款著名的Minecraft模组整合包。古明地恋学姐最近成为了一名GTNH员工,并和其他员工一起在基地中飞速发展,目前已经到达了IV的电压等级,并且搭起了一套完整的铂处理产线。

可是目前基地的发电量是无法承受住这如此庞大产线的消耗的,于是恋学姐准备搭建一套核电发电系统,以维持产线的供电需求。

但是核电这玩意,一定要经过严密的设计与计算,否则一个不注意,燃料棒产生的热量无法及时散出就会爆炸,恋学姐的基地就会化作一个大坑(Explosion!!!

为了基地的安全,为了产线能运行下去,恋学姐要背负巨大的责任,她想到了擅长计算机的你,委托你编写一个计算核电布局的热量与发电量的程序,用于事先模拟学姐的设计,以免发生悲剧。

题目描述

GTNH中,核反应堆是一个极其复杂的发电装置,这里我们简化了许多操作,以方便计算。

整个核反应堆由一个核反应堆方块和四个核反应仓组成,搭建完成后,玩家可以打开核反应堆的GUI,往里面填充燃料棒等物品,以设计自己的核反应堆,如下图

核反应堆

反应堆的GUI是一个六行九列的网格,每个格子可以放置不同的组件(括号里的符号是在输入数据内的表示):

  1. 燃料棒(F):产生电力和热量的核心部件
  2. 红石散热片(R):吸收热量的基础冷却装置
  3. 金散热片(G):效果更好的冷却装置
  4. 钻石散热片(D):最强大的冷却装置
  5. 中子反射板(N):提升燃料棒发电效率的辅助装置
  6. 空位(.):空白位置

在放置好组件后,提供红石信号,核反应堆就可以开始运行,其中有几个重要的机制:

发电机制

这里我们仅考虑IC2电网规则,不考虑与GT电网的转换与传输

每个燃料棒格子都会产生电力,产生量由每个燃料棒的基础发电量、效率、中子量决定:

  1. 效率 = 1+棒数21 + \lfloor\frac{\text{棒数}}{2}\rfloor(棒数为当前格的燃料棒数)

  2. 中子量计算

    • 燃料棒自身提供等于其棒数的中子量
    • 中子反射板会为周围的燃料棒提供等同于其棒数的中子量,相当于将燃料棒的中子量反射回去了。
  3. 发电量计算

    基础发电量 = 单棒基础发电量 × 效率 × 棒数
    实际发电量 = 基础发电量 + 单棒基础发电量 × 周围中子量 × 棒数
    

    注意:这里我们假定所有单棒基础发电量均为100

热量产生机制

每个燃料棒都会产生热量,产生量由每个燃料棒的效率、周围发热邻居数决定:

  1. 发热效率 = 效率 + 周围发热邻居数(包括燃料棒和中子反射板

    (中子反射板参与燃料棒的发热邻居计数,但本身不发热)

  2. 发热量计算:

    发热量 = 基础发热量 × (发热效率 × (发热效率 + 1)) × 棒数 ÷ 2
    

    注意:这里我们假定基础发热量为50

冷却机制

这里的冷却机制也进行了简化,名称和游戏里的不同,且只考虑吸热,无限耐久,不考虑使用热交换器

散热片负责吸收热量,吸收效果取决于其类型和周围燃料棒数量:

  • 红石散热片:基础4点 + 每相邻燃料棒2点散热
  • 金散热片:基础6点 + 每相邻燃料棒3点散热
  • 钻石散热片:基础12点 + 每相邻燃料棒6点散热

运行机制

  1. 每游戏刻,所有组件同时工作
  2. 产生电量并累加到总电量
  3. 计算净热量变化,加到反应堆的堆温中
  4. 如果任何时候堆温超过10000点,反应堆就会瞬间爆炸!

恋学姐会给你她的反应堆设计方案,你需要判断在tt游戏刻内,反应堆是否会发生爆炸。

输入格式

第一行包含一个整数t(1t100)t (1 ≤ t ≤ 100),表示运行的时间(游戏刻)

接下来66行,每行99个字符,表示反应堆的布局,组件符号表示见上面

最后66行,每行99个整数,表示每个格子中组件的数量xi,jx_{i,j},其中:

  • 燃料棒每组个数xi,j(1xi,j4)x_{i,j}(1\leq x_{i,j}\leq 4)
  • 空气处xi,j=0x_{i,j}=0
  • 散热片与中子反射板xi,j=1x_{i,j}=1

题目中所有邻居指上下左右四个方向的邻居

输出格式

如果在运行期间发生爆炸,输出 "Explosion!!!"(不含双引号)

如果运行时间结束,仍未发生爆炸,输出 “Stable”(不含双引号),并另起一行,输出总发电量

样例数据

3
.........
....N....
....FR...
.........
.........
.........
0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 0 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0

Stable 
900
2
.........
...DND...
..GFFFG..
...DDD...
.........
.........
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 1 4 3 2 1 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0

Stable
19200
1
.........
...NNN...
...FFF...
...FFF...
...NNN...
.........
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 4 4 4 0 0 0
0 0 0 4 4 4 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0

Explosion!!!

解释

下面是对样例1的解释:

  • 运行时间 t=3t = 3 游戏刻。
  • 仅有 1 个燃料棒格子,位置在第3行第5列(数量1);它的右侧是一个红石散热片R;上方是一个中子反射板 N。其余位置为空。

对于该燃料格(棒数 r=1r = 1):

  1. 效率(eff) = 1
  2. 计算周围中子量:
    • 自身提供 r=1r = 1
    • 有1个相邻的中子反射板,每个反射板再贡献 r,所以额外 1
  3. 单棒基础发电量假定为 100:
    • 基础发电量 = 100×eff×r=100×1×1=100100 × eff × r = 100 × 1 × 1 = 100
    • 实际发电量 = 基础发电量+100×n×r=100+100×2×1=300基础发电量 + 100 × n × r = 100 + 100 × 2 × 1 = 300(每个游戏刻)
  4. 发热效率 fe=eff+周围发热邻居数=2fe = eff + \text{周围发热邻居数}=2 发热量 = $50 × (fe × (fe + 1)) × \frac{r}{2} = 50 × (2×3) ×\frac{1}{2} = 150$(每个游戏刻)
  5. 散热片R吸热:4+2×(相邻燃料棒数)=64 + 2 × (相邻燃料棒数)=6(每个游戏刻)

单 tick 的净热量变化 = 发热(150)吸热(6)=+144发热(150) - 吸热(6) = +144 热量储存增加情况:144,288,432144, 288, 432,均 < 10000,不会爆炸

总发电量 = 300×3=900300 × 3 = 900