【发布时间】:2026-01-09 15:40:02
【问题描述】:
一家公司生产可以直接在现场植入的墙壁。公司使用C料和D料的小方砖,外观相似,但质量差别很大。该公司生产方形墙壁只是为了优化成本。
一位新手员工使用材料 C 和 D 的砖块制作了一面方形墙。但是,客户要求墙壁仅由优质材料 - 材料 C 制成。
为了解决这个问题,他们会将墙壁放在一个特殊的炉子中并加热,使材料 D 熔化,只剩下材料 C。如果其下方的材料 D 砖熔化,材料 C 砖会因重力而向下移动。新创建的空白空间将被新材料 C 方墙填充。他们还想在建造最后一堵墙时使用尽可能大的 C 方形墙。为此,他们将以最佳方式将炉壁定位在炉中,即如果需要,可任意旋转 90 度,从而为新材料 C 壁创造最大的空间。炉子开始加热时不能旋转。
鉴于新员工创建的原始墙的结构,您需要找出新的C方形墙的尺寸,可以安装在将交付给客户的最终墙中。
约束 1
输入 第一行将提供原始墙 N 的大小。
接下来的 N 行将提供新手员工用于每块砖的材料类型(C 和 D)。
输出 可以安装在最终墙中的最大可能 C 方形墙的尺寸。
时间限制 1
示例 示例 1
输入
4
C D C D
C C D C
D D D D
C D D D
输出
3
解释
如果墙的左侧位于底部,则可以为新的 2x2 大小的 C 墙创建空间。这可以形象化如下
D C D D
C D D D
D C D D
C C D C
熔化的砖块可以如下可视化
- C - -
C C - -
C C - C
因此,可以更换的最大墙壁尺寸为 2x2。
如果墙按原样放置,其原始底面位于底部,则可以为新的 3x3 大小的 C 墙创建空间。熔化后,可以如下所示进行可视化。
C - - -
C - - -
C C C C
因此,在这种方法中,可以替换的最大墙壁尺寸为 3x3。
由于没有旋转后加热会产生大于 3x3 的空间,因此输出为 3。
示例 2
输入
7
C D D C D D D
C D D C D D D
D D D D D D C
D C D C D D D
D D D C D C D
C D D C D C C
C D C D C C C
输出
5
解释
如果墙的左侧位于底部,则可以为新的 5x5 的 C 墙创建空间。这可以形象化如下
D D C D D C C
D D D D C C C
D D D D D D C
C C D C C C D
D D D D D D C
D D D C D D D
C C D D D C C
当这个方向的墙被加热时,在 D 砖融化后,为新的 5x5 的 C 墙创建了一个空间
_ _ _ _ _C
_ _ _ _ _ C C
_ _ _ _ _ C C
C C _ C C C C
C C C C C C C
而如果不进行旋转,则D砖熔化后形成的墙如下
_ _ _ C _ _ _
C _ _ C _ _ _
C _ _ C _ _ C
C _ _ C _ C C
C C C C C C C
当这个方向的墙被加热时,只有在 D 砖融化后才会为新的 3x3 大小的 C 墙创建空间
因此轮换很重要,正确答案是 5x5
由于没有旋转后加热会产生大于 5x5 的空间,因此输出为 5。
// matrix rotation by 90 degrees
void rotate90Clockwise(int a[N][N])
{
// Traverse each cycle
for (int i = 0; i < N / 2; i++) {
for (int j = i; j < N - i - 1; j++) {
// Swap elements of each cycle
// in clockwise direction
int temp = a[i][j];
a[i][j] = a[N - 1 - j][i];
a[N - 1 - j][i] = a[N - 1 - i][N - 1 - j];
a[N - 1 - i][N - 1 - j] = a[j][N - 1 - i];
a[j][N - 1 - i] = temp;
}
}
}
【问题讨论】:
-
问题是什么?你想让我们为你写一些代码吗? 你尝试过什么?
-
@Evg,我编写了旋转代码,但我很困惑如何删除“D”并在此之后获得最大大小的子数组......我知道逻辑但代码实现问题让我感到沮丧跨度>
-
那我建议你问一个更具体的关于你的实现问题的问题,并展示你到目前为止的一些代码。 How do I ask a good question?
-
我会首先将逻辑分成不同的类和方法,例如有一个旋转墙壁将其熔化并熔化并施加重力的熔炉类。然后也许是第三类,给你最大的正方形。需要遍历墙的各种旋转并记住可能的最大正方形。
-
实现融合的一种简单方法是遍历列,将
D替换为0并使用std::sort按升序排序。对每一列执行此操作。
标签: c++ arrays algorithm matrix logic