HDU 4920 Matrix multiplication 题解(内存访问连续性/卡常)

题目链接

题目大意

多组输入,给你两个n×n的矩阵,要你求他们相乘%3的值

题目思路

这个题目主要是要了解内存访问连续化,要尽量每次访问连续的内存

img

所以第一种方法会超时,第二种则AC。一种卡常技巧

代码

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#define fi first
#define se second
#define debug printf(" I am here\n");
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=1e3+5,inf=0x3f3f3f3f,mod=1e9+7;
const double eps=1e-10;
int n;
ll a[maxn][maxn],b[maxn][maxn],ans[maxn][maxn];
signed main(){
    while(scanf("%d",&n)!=-1){
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                scanf("%lld",&a[i][j]);
                ans[i][j]=0;
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                scanf("%lld",&b[i][j]);
            }
        }
        for(int i=1;i<=n;i++){
            for(int k=1;k<=n;k++){
                for(int j=1;j<=n;j++){
                    ans[i][j]=(ans[i][j]+a[i][k]*b[k][j])%3;
                }
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                printf("%lld%c",ans[i][j],j==n?'\n':' ');
            }
        }
    }
    return 0;
}

posted @ 2020-09-11 22:00  hunxuewangzi  阅读(154)  评论(1编辑  收藏  举报