1 条题解

  • 0
    @ 2025-8-24 21:15:45

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar chen_zhe
    Aya 敲可爱的~

    搬运于2025-08-24 21:15:44,当前版本为作者最后更新于2023-11-13 20:44:23,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    Source & Knowledge

    2023 年 11 月语言月赛,由洛谷网校入门计划/基础计划提供。

    考察数组的运用。

    文字题解

    我们分别实现题目中给定的两个操作。

    合并操作

    观察题目中给定的合并操作的描述,我们会发现以下的特征:我们可以将原表格划分成若干 2×22\times 2 的小表格。每个表格仅会保留最左上角的那个位置。其他的三个数会被加入到表格最左上角的值。以样例为例:

    $\begin{bmatrix}\blue2 & \blue7 & \red1 & \red8 \\ \blue1 & \blue8 & \red2 & \red8 \\ \green3 & \green1 & \purple4 & \purple1 \\ \green5 & \green9 & \purple2 & \purple6 \end{bmatrix}$

    我们用四种不同的颜色区分出了四个小表格。如果每个表格仅保留最左上的位置,其他的数加入到小表格最左上的值的话,就会变成:

    $\begin{bmatrix} \blue{18} & \red{19} \\ \green{18} & \purple{13}\end{bmatrix}$

    这恰恰与合并操作做的是相同的。因此,我们无需真的去删除偶数行和偶数列,仅仅需要通过这种方式我们就可以自然地完成合并操作。

    而至于转置操作,我们可以根据题目含义,交换矩阵中的行和列,进行输出即可。

    本题的坑点有两个:

    • 题目中给定的变量是 nnmm,但是实际上表格 AA2n2n2n2n 列的,因此数组的每个维度要开到 nnmm 限制的两倍大小,才能保证数组不越界;

    • 题目中的样例,给定的情况都是 n=mn=m 的,如果转置操作写的有问题(例如说,输出不是 mmnn 列的表格 ATA^T,而不小心打成了 nnnn 列),那么可能无法检查出错误。

    详细的代码请参考视频题解。

    • 1

    信息

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