Matrix multiplication

题目链接

  • 题意:

    给两个n*n的矩阵,求乘积后对3取摸的结果(1≤n≤800)

  • 分析:

    考虑一下为什么给3呢,对3取摸只可能得到0、1、2,都可以看作两位的,那么在乘法的时候我们可以用分配率将原来的矩阵乘法分成四个矩阵乘法,每个矩阵都只包括0和1。对于0/1矩阵的乘法,可以使用bitset来快速运算

const int MAXN = 801;

bitset<MAXN> r1[MAXN], r2[MAXN], c1[MAXN], c2[MAXN];

int a[MAXN][MAXN];

int main()
{
    int n;
    while (~RI(n))
    {
        REP(i, n) REP(j, n)
        {
            RI(a[i][j]);
            if (a[i][j] >= 3)
                a[i][j] %= 3;
            r1[i][j] = a[i][j] >> 1;
            r2[i][j] = a[i][j] & 1;
        }
        REP(i, n) REP(j, n)
        {
            RI(a[i][j]);
            if (a[i][j] >= 3)
                a[i][j] %= 3;
            c1[j][i] = a[i][j] >> 1;
            c2[j][i] = a[i][j] & 1;
        }
        REP(i, n) REP(j, n)
        {
            a[i][j] = (r1[i] & c1[j]).count() ;
            a[i][j] += ((r1[i] & c2[j]).count()) << 1;
            a[i][j] += ((r2[i] & c1[j]).count()) << 1;
            a[i][j] += (r2[i] & c2[j]).count() ;
            if (a[i][j] >= 3)
                a[i][j] %= 3;
        }
        REP(i, n) REP(j, n)
            printf("%d%c", a[i][j], j == n - 1 ? '\n' : ' ');
    }
    return 0;
}

Matrix multiplication,布布扣,bubuko.com

时间: 2024-08-26 07:24:42

Matrix multiplication的相关文章

ACDream 1213 Matrix Multiplication (01矩阵处理)

Matrix Multiplication Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Submit Statistic Next Problem Problem Description Let us consider undirected graph G = {V; E} which has N vertices and M edges. Incidence matrix of

HDU 4902 Matrix multiplication

点击打开链接 Matrix multiplication Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 2113    Accepted Submission(s): 956 Problem Description Given two matrices A and B of size n×n, find the product o

POJ 3318 Matrix Multiplication(随机化算法)

给你三个矩阵A,B,C.让你判断A*B是否等于C. 随机一组数据,然后判断乘以A,B之后是否与乘C之后相等. 很扯淡的啊,感觉这种算法不严谨啊... Matrix Multiplication Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 16255   Accepted: 3515 Description You are given three n × n matrices A, B and C. Does the e

poj 3318 Matrix Multiplication

http://poj.org/problem?id=3318 矩阵A*矩阵B是否等于矩阵C 1 #include <cstdio> 2 #include <cstring> 3 #include <time.h> 4 #include <algorithm> 5 #define maxn 1010 6 using namespace std; 7 8 int a[maxn][maxn],b[maxn][maxn],c[maxn][maxn],d[maxn];

[SGU 196] Matrix Multiplication

196. Matrix Multiplication time limit per test: 0.25 sec. memory limit per test: 65536 KB input: standard output: standard Description Let us consider an undirected graph G = <V, E> which has N vertices and M edges. Incidence matrix of this graph is

矩阵乘法 --- hdu 4920 : Matrix multiplication

Matrix multiplication Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 820    Accepted Submission(s): 328 Problem Description Given two matrices A and B of size n×n, find the product of them. b

HDU 4920 Matrix multiplication(矩阵相乘)

各种TEL,233啊.没想到是处理掉0的情况就可以过啊.一直以为会有极端数据.没想到竟然是这样的啊..在网上看到了一个AC的神奇的代码,经典的矩阵乘法,只不过把最内层的枚举,移到外面就过了啊...有点不理解啊,复杂度不是一样的吗.. Matrix multiplication Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 640 

HDU4920 Matrix multiplication 矩阵

不要问我 为什么过了 窝也不造为什么就过了 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <limits.h> #include <malloc.h> #include <ctype.h> #include <math.h> #include <string> #include<iostream> #inclu

hdu 4920 Matrix multiplication(矩阵乘法)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4920 Matrix multiplication Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 989    Accepted Submission(s): 396 Problem Description Given two matr