首页 > 其他分享 >小美的平衡矩阵

小美的平衡矩阵

时间:2024-05-28 21:13:17浏览次数:21  
标签:matrix ++ 美的 sum 矩阵 平衡 maxLine childLine

一、题目信息
image
二、解题思路

    1、这里采用 C++ 解答,题目限制如下

imageimage

    2、输出要求?
    根据输出可以看出第一行输出的是所有1*1子矩阵中符合完美矩阵(矩阵中 0 的个数等于 1 的个数)条件的矩阵个数,其余输出同理。
    3、如何遍历所有矩阵
    采用按行遍历的方式。比如>采用按行遍历的方式。比如 2*2 的矩阵,从左上角2*2的矩阵开始,往右移动一个单位即得到一个新的矩形,直至移动到 200 * 200 矩阵的最后一列。接下来还从最左边开始(左上角的矩阵向下移动一行),同理再每向右移动一个单位得到一个新矩阵。整个过程即从左上角2*2的矩阵开始,移动到右下角2*2的矩阵结束,得到了所有的子矩阵。
    4、如何判断子矩阵是否为完美矩阵?
    计算矩阵的值(所有元素的和),值=矩阵元素个数/2(必须整除)即完美矩阵,首先对 2 取模,模不为零不满足,因为不能整除
    5、如何快速计算矩阵的值
    首先保存前一个矩阵(旧矩阵)的值,每移动一个单位不用遍历新矩阵的所有元素来计算值,计算新矩阵相较于旧矩阵新增列与失去列的差值即可,差值与旧矩阵值的和就得到了新矩阵的值
点击查看代码
#include <iostream>
#include<array>

void checkPerfectMatrix(const size_t childLine, const size_t& maxLine, const std::array<std::array<char, 200>, 200>& matrix, size_t& perfectMatrix) {

    // 奇数个矩阵元素不符合要求
    if (childLine * childLine % 2) {
        return;
    }

    size_t sum = 0, curHeadOfRowMatrixValue = 0, matrixRowStart = 0, matrixRowEnd = childLine, matrixColumnStart = 0, matrixColumnEnd = childLine;

    // child matrix
    for (int i = matrixRowStart; i < matrixRowEnd; i++) {
        for (int j = matrixColumnStart; j < matrixColumnEnd; j++) {
            sum += matrix[i][j] - '0';
        }
    }
    curHeadOfRowMatrixValue = sum;
    while(1) {
        
        // sum of matrix elem
        if (matrixColumnStart > 0) {
            for (int i = matrixRowStart; i < matrixRowEnd; i++) {
                sum += (matrix[i][matrixColumnEnd -1] - matrix[i][matrixColumnStart - 1]);
            }
        }

        // judge perfect matrix
        if ((sum != 0) && (sum == childLine*childLine/2)) {
            perfectMatrix++;
        }

        // reinit
        matrixColumnStart++; matrixColumnEnd++;
        if (matrixColumnEnd > maxLine) {
            matrixRowStart++, matrixRowEnd++, matrixColumnStart = 0, matrixColumnEnd = childLine;
            for (int i = 0; i < childLine; i++) {
                sum = curHeadOfRowMatrixValue;
                sum += (matrix[matrixRowEnd - 1][i] - matrix[matrixRowStart - 1][i]);
                curHeadOfRowMatrixValue = sum;
            }
            if (matrixRowEnd > maxLine) {
                break;
            }
        }

    }

}
int main() {

    size_t maxLine = 0, perfectMatrix = 0; const size_t LINE = 0; const size_t ROW = 1;
    std::array<std::array<char, 200>, 200> matrix;
    std::cin >> maxLine;

    // init matrix
    for (int i = 0; i < maxLine; i++) {
        for (int j = 0; j < maxLine; j++) {
            std::cin >> matrix[i][j];
        }
    }
    
    for (int i = 0; i < maxLine; i++) {

        // output perfect matrix
        checkPerfectMatrix(i+1, maxLine, matrix, perfectMatrix);
        std::cout << perfectMatrix << std::endl;
        perfectMatrix = 0;  
    }


    return 0;
}
    6、结果

image

标签:matrix,++,美的,sum,矩阵,平衡,maxLine,childLine
From: https://www.cnblogs.com/zwsmile/p/18218676

相关文章

  • 平衡树 学习笔记
    BST又称二分查找树,\(BST\)性质指其左子树所有节点全职均小于该点,其右子树所有节点全职均大于该点;同时若对该棵树进行中序遍历,所产生的序列为从小到大排序的序列。利用该性质,从而在\(O(\log(n))\)的复杂度内实现查询排名、第\(k\)小(大)值、前驱、后继等。当每次插入的数据呈......
  • 算法导论,矩阵链乘法(动态规划)
    直入主题,5.27学的矩阵链相乘(动态规划)题目理解:        1.原题                要求:对A1,A2,A3......An进行矩阵的乘法(线性代数的基础知识),求通过添加括号,以达到的最小乘法次数    2.题目理解        乘法:由于矩阵乘法的结合......
  • 云原生周刊:K8s 上的 gRPC 名称解析和负载平衡
    开源项目推荐KrakenKraken是一个基于P2P的Docker注册表,专注于可扩展性和可用性。它专为混合云环境中的Docker镜像管理、复制和分发而设计。借助可插拔的后端支持,Kraken可以轻松集成到现有的Docker注册表设置中作为分发层。E2EFramework这个项目是一个专门用于Kube......
  • 算法训练 | 二叉树Part4 | 10.平衡二叉树、257.二叉树的所有路径、404.左叶子之和
    目录110.平衡二叉树递归法迭代法257.二叉树的所有路径递归法迭代法404.左叶子之和递归法迭代法110.平衡二叉树题目链接:leetcode.cn文章讲解:代码随想录递归法解题思路高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。要求......
  • 最小二乘法-超详细推导(转换为矩阵乘法推导,矩阵求导推导)
    最小二乘法就是让均方误差最小。下面是损失函数转换为矩阵方式的详解如何让其最小,在导数为0的地方取极小值。问:导数为0的地方可能去极大值,也可能是极小值,凭什么说导数为0就是极小值?答:因为使用的是均方误差,他是一个凹函数,导数为0的点即为最小值和极小值。建议学习一下线......
  • 【Python】利用TensorFlow和Keras进行不平衡数据集的分类任务
    原谅把你带走的雨天在渐渐模糊的窗前每个人最后都要说再见原谅被你带走的永远微笑着容易过一天也许是我已经老了一点那些日子你会不会舍不得思念就像关不紧的门空气里有幸福的灰尘否则为何闭上眼睛的时候又全都想起了谁都别说让我一个人躲一躲你的承诺我竟......
  • 20240521考试(1.打印数字字符 2.打印面积(类的继承)3.简单的矩阵加减)
    目录1.打印数字字符2.打印面积(类的继承)3.简单的矩阵加减1.打印数字字符#include<iostream>#include<iomanip>usingnamespacestd;classdatatype{public:datatype(){}datatype(charc):c(c),i(0),f(0){}datatype(inti):c(0),i......
  • 螺旋矩阵
    leetcode:59题给你一个正整数n,生成一个包含1到n2所有元素,且元素按顺时针顺序螺旋排列的nxn正方形矩阵matrix。C#:publicclassSolution{publicint[][]GenerateMatrix(intn){int[][]result=newint[n][];for(intp=0;p<n;p++)......
  • Java数据结构与算法(平衡二叉树)
    前言平衡二叉树是为了提高二叉树的查询速度,通过满足特定的条件来保持其平衡性。平衡二叉树具有以下特点:左子树和右子树的高度差不会大于1,这是为了确保树的高度不会过大,从而减少查询时的磁盘I/O开销,提高查询速度。平衡二叉树上的所有结点的平衡因子(左子树深度减去右子树深度的......
  • 【刷题笔记Day2】数组|977.有序数组的平方、209. 长度最小的子数组、59.螺旋矩阵II
    文章目录977.有序数组的平方解题思路遇到的问题及解决方案209.长度最小的子数组解题思路遇到的问题及解决方案59.螺旋矩阵II解题思路遇到的问题及解决方案总结977.有序数组的平方题目描述:给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新......