1 条题解

  • 0
    @ 2025-8-24 21:18:13

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar chen_zhe
    Aya 敲可爱的~

    搬运于2025-08-24 21:18:12,当前版本为作者最后更新于2025-05-10 11:20:50,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    欢迎报名洛谷网校,期待和大家一起进步!

    本题是一道较为基础的考察二维数组的题目。

    既然我们要找所有 2×22 \times 2 的“好的”小矩阵,最直接的想法就是:我们把大表格里所有可能的 2×22 \times 2 小矩阵都找出来,然后一个一个地检查它们是不是“好的”。

    一个 2×22 \times 2 的小方块是由它的左上角位置决定的。假设这是第 rr 行第 cc 列,我们就知道了这个小方块的四个数字:

    • 左上角 D1,1D_{1,1} 就是大表格里的 A[r][c]A[r][c]
    • 右上角 D1,2D_{1,2} 就是大表格里的 A[r][c+1]A[r][c+1] (同一行,右边一列)
    • 左下角 D2,1D_{2,1} 就是大表格里的 A[r+1][c]A[r+1][c] (下一行,同一列)
    • 右下角 D2,2D_{2,2} 就是大表格里的 A[r+1][c+1]A[r+1][c+1] (下一行,右边一列)

    因此我们只需要判断 A[r][c]×A[r+1][c+1]A[r][c] \times A[r+1][c+1] 是不是等于 A[r][c+1]×A[r+1][c]A[r][c+1] \times A[r+1][c] 即可,使用计数变量统计好的子矩阵个数即可。

    参考代码:

    for (int r = 0; r < n - 1; r++)
        for (int c = 0; c < m - 1; c++)
            if (a[r][c] * a[r + 1][c + 1] == a[r + 1][c] * a[r][c + 1])
                ans++;
    
    • 1

    信息

    ID
    11774
    时间
    1000ms
    内存
    512MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者