1610.多层血条

时间限制:1s 内存限制:512MB

在本题中你将帮助比特公司的新游戏《超维攻坚》实现BOSS战的多层血条功能。血条由 $n$ 行 $m$ 列个像素构成,外围还有一圈 $1$ 像素厚的边框,样式请参照样例。

假设BOSS有 $k$ 条血,则血条由 $k+1$ 个图层自底向上叠加而成。底层是 $n$ 行 $m$ 列个空格,上面的 $k$ 层自底向上依次表示第 $1,2,…,k$ 条血。每条血都有 $n$ 行,每一列代表 $1$ 点生命值,因此一共有 $k=⌈\frac{hp}{m}⌉$ 条血。每条血都由单一字符构成,自底向上由字符 'A' 到 'E' 循环表示,例如:第一条血为 'A',第二条血为 'B',第五条血为 'E',第六条血为 'A'。

除此之外,为了加强击打反馈,假设BOSS有 $hp$ 点生命值,玩家当前的攻击对BOSS造成了 $dmg$ 点伤害,那么第 $hp−dmg+1$ 至第 $hp$ 点生命值代表的像素将被替换成字符 '.'。

给定 $n,m,hp,dmg$,请绘制出对应的多层血条。

输入格式(从终端/标准输入读取)

第一行包含一个正整数 $T (1≤T≤50)$,表示测试数据的组数。

每组数据包含一行四个整数 $n,m,hp,dmg (1≤n≤50, 5≤m≤800, 1≤hp≤10^9, 0≤dmg\lt hp)$,分别表示血条的尺寸、BOSS的生命值以及当前受到的伤害。

输出格式(输出至终端/标准输出)

对于每组数据输出 $n+2$ 行,每列 $m+2$ 个字符,即对应的多层血条。

输入样例

复制
5
2 5 4 2
1 10 49 1
1 10 52 0
1 10 52 5
1 10 52 50
 \n
 · · · \n
 ·  ·  · \n
 ·  ·  · \n
 ·  ·  · \n
 ·  ·  ·  \n

输出样例

复制
+-----+
|AA.. |
|AA.. |
+-----+
+----------+
|EEEEEEEE.D|
+----------+
+----------+
|AAEEEEEEEE|
+----------+
+----------+
|..EEEEE...|
+----------+
+----------+
|..........|
+----------+
       \n
     · \n
     · \n
       \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
来源: 2024“钉耙编程”中国大学生算法设计超级联赛(4)

提交题解

Please login first.

© 2025 FAQs