首页 > 其他分享 >封装矩阵一系列

封装矩阵一系列

时间:2023-08-12 20:22:25浏览次数:30  
标签:封装 一系列 ll colu 矩阵 ans const Matrix

struct Matrix {
    typedef long long ll;
    const ll mod = 1000000007;
    ll matrix[110][110];
    //矩阵里的每一个数
    ll line, colu;
    //矩阵的行,列
    Matrix operator *(const Matrix &b) const{
        Matrix ans;
        ans.line = line, ans.colu = b.colu;
        for (int i = 1; i <= line; ++ i) {
            for (int j = 1; j <= b.colu; ++ j) {
                ans.matrix[i][j] = 0;
                for (int k = 1; k <= colu; ++ k) {
                    ans.matrix[i][j] = (ans.matrix[i][j] + matrix[i][k] * b.matrix[k][j] % mod) % mod;
                }
            }
        }
        return ans;
    } //矩阵乘法
    bool operator ==(const Matrix &b) const{
        if (colu != b.colu || line != b.line) return false;
        for (int i = 1; i <= line; ++ i) {
            for (int j = 1; j <= colu; ++ j) {
                if (matrix[i][j] != b.matrix[i][j]) {
                    return false;
                }
            }
        }
        return true;
    } //判断矩阵是否相等
    bool operator !=(const Matrix &b) const{
        if (colu != b.colu || line != b.line) return true;
        for (int i = 1; i <= line; ++ i) {
            for (int j = 1; j <= colu; ++ j) {
                if (matrix[i][j] != b.matrix[i][j]) {
                    return true;
                }
            }
        }
        return false;
    } //判断矩阵是否不相等
    Matrix operator +(const Matrix &b) const{
        Matrix ans;
        ans.line = line, ans.colu = colu;
        for (int i = 1; i <= line; ++ i) {
            for (int j = 1; j <= colu; ++ j) {
                ans.matrix[i][j] = matrix[i][j] + b.matrix[i][j];
            }
        }
        return ans;
    } //矩阵加
    Matrix operator -(const Matrix &b) const{
        Matrix ans;
        ans.line = line, ans.colu = colu;
        for (int i = 1; i <= line; ++ i) {
            for (int j = 1; j <= colu; ++ j) {
                ans.matrix[i][j] = matrix[i][j] - b.matrix[i][j];
            }
        }
        return ans;
    } //矩阵减
    void operator =(const Matrix &b) {
        line = b.line, colu = b.colu;
        for (int i = 1; i <= line; ++ i) {
            for (int j = 1; j <= colu; ++ j) {
                matrix[i][j] = b.matrix[i][j];
            }
        }
        return;
    } //矩阵赋值
    void MatrixPre(Matrix &a) {
        for (int i = 1; i <= a.line; ++ i) {
            for (int j = 1; j <= a.colu; ++ j) {
                if (i == j) a.matrix[i][j] = 1;
                else a.matrix[i][j] = 0;
            }
        }
        return;
    } //将矩阵a变成单位矩阵
    Matrix MatrixQuickPower(Matrix const &mat, ll b) {
        Matrix base = mat, ans;
        ans.line = mat.line, ans.colu = mat.colu;
        MatrixPre(ans);
        while (b != 0) {
            if ((b & 1) == 1) {
                ans = ans * base;
            }
            base = base * base;
            b >>= 1;
        }
        return ans;
    } //矩阵快速幂
};

标签:封装,一系列,ll,colu,矩阵,ans,const,Matrix
From: https://www.cnblogs.com/jueqingfeng/p/17625417.html

相关文章

  • java_封装
    如何实现封装将状态私有化(在状态前加private)提供获取状态的方法(public的get方法)提供修改状态的方法(public的set方法)classBicycle{//状态privateintcadence=0;//将状态私有化 //行为publicintgetCadence(){//提供获取状态的方法......
  • 4954: 矩阵游戏
    题目描述婷婷是个喜欢矩阵的小朋友,有一天她想用电脑生成一个巨大的\(n\)行\(m\)列的矩阵(你不用担心她如何存储)。她生成的这个矩阵满足一个神奇的性质:若用\(F[i,j]\)来表示矩阵中第\(i\)行第\(j\)列的元素,则\(F[i,j]\)满足下面的递推式:\[\begin{aligned}F[1,1]&=......
  • 矩阵游戏
    4954:矩阵游戏时间限制(普通/Java):2000MS/6000MS内存限制:65536KByte描述婷婷是个喜欢矩阵的小朋友,有一天她想用电脑生成一个巨大的n行m列的矩阵(你不用担心她如何存储)。她生成的这个矩阵满足一个神奇的性质:若用F[i][j]来表示矩阵中第i行第j列的元素,则F[i][j]满足下......
  • Go数组转换,[]byte、[]unint16互相转换的方法封装,完整范例
    需求:分别封装方法将[]byte转换成[]unint16,将[]unint16转换成[]bytebyte相当于unint8分析:长度为20的[]byte转换为长度为10的[]unint16,他们之间的转换如bytes:=[]byte{0,1}  ===》[0*256+1]=1 注意:第奇数乘256加偶数的值则[]uint16的值为[1]完整代码如下:1pack......
  • Python黑魔法 --- 协程分解与封装
    Python黑魔法---异步IO(asyncio)协程pythonasyncio网络模型有很多中,为了实现高并发也有很多方案,多线程,多进程。无论多线程和多进程,IO的调度更多取决于系统,而协程的方式,调度来自用户,用户可以在函数中yield一个状态。使用协程可以实现高效的并发任务。Python的在3.4中引入了......
  • 封装一个useTable 内置分页 条件变换查询
    import{Table}from'antd';import{useImmer}from'common/hooks/useImmer';import{get}from'utils/request';importtype{ColumnsType,TablePaginationConfig}from'antd/es/table';import{useState}from......
  • 简单介绍LiveData、ViewModel以及使用二者封装一个简单的基类用于测试
    一、概述1.LiveData概述什么事LiveData?1.LiveData是一种可观察的数据存储器类2.LiveData是一个数据持有者,给源数据包装一层。3.源数据使用LiveData包装后,可以被observer观察,数据有更新时observer可感知。4.但observer的感知,只发生在(Activity/Fragment......
  • 对jdbctemplate的再次简单封装
    JdbcTemplateRepository.javaimportorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.jdbc.core.BatchPreparedStatementSetter;importorg.springframework.jdbc.core.Bea......
  • 剑指 Offer 12. 矩阵中的路径(中等)
    题目:classSolution{public:introw,col;booltraversal(vector<vector<char>>&board,stringword,inti,intj,intk){//传入棋盘,字符串,当前棋盘元素坐标,字符串索引if(i<0||i>=row||j<0||j>=col||board[i][j]!=word[k])retu......
  • 在库存数量的条件约束下,求满足产品需求的材料投入数量矩阵X的所有可行解,即BX=AC,求X
    问题有r种元素,某产品的元素构成比例为矩阵A;有n种材料,元素构成比例为矩阵B;已知该产品的需求量为C,材料的库存数量为矩阵D;在库存数量的条件约束下,求满足产品需求的材料投入数量矩阵X的所有可行解,即BX=AC,求X的所有可行解.提示当元素数量r=材料数量n时,有唯一解当r<n时,有多个......