1. 程式人生 > >【模板】矩陣乘法

【模板】矩陣乘法

template<int x, int y>
struct matrix {
    int s[x][y];
    matrix() {memset(s, 0, sizeof(s));}
    matrix(int a[x][y]) {memcpy(s, a, sizeof(a));}
    int* operator [] (int p) {return s[p];}
    template<int xy>
    matrix<x, xy> operator * (const matrix<y, xy> a)const {
        matrix<x, xy>c;
        for(int i = 0; i < x; i ++)
            for(int j = 0; j < xy; j ++)
                for(int k = 0; k < y; k ++)
                    c[i][j] += s[i][k] * a[k][j];
        return c;
    }
    template<int xy>
    matrix<x, xy> mul(const matrix<y, xy> a, const int mod)const {
        matrix<x, y>c;
        for(int i = 0; i < x; i ++)
            for(int j = 0; j < xy; j ++)
                for(int k = 0; k < y; k ++)
                    c[i][j] += s[i][k] * a[k][j], c[i][j] %= mod;
        return c;
    }
};