首页 > 其他 > 详细

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

时间:2020-09-11 23:13:20      阅读:75      评论:0      收藏:0      [点我收藏+]

题目链接

题目大意

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

题目思路

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

技术分享图片

所以第一种方法会超时,第二种则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;
}

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

原文:https://www.cnblogs.com/hunxuewangzi/p/13654636.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!