• Hdu 4920矩阵乘法(内存访问的讲究)


    题目链接

    Matrix multiplication

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
    Total Submission(s): 2143    Accepted Submission(s): 967


    Problem Description
    Given two matrices A and B of size n×n, find the product of them.

    bobo hates big integers. So you are only asked to find the result modulo 3.
    Input
    The input consists of several tests. For each tests:

    The first line contains n (1≤n≤800). Each of the following n lines contain n integers -- the description of the matrix A. The j-th integer in the i-th line equals Aij. The next n lines describe the matrix B in similar format (0≤Aij,Bij≤109).
    Output
    For each tests:

    Print n lines. Each of them contain n integers -- the matrix A×B in similar format.
    Sample Input
    1
    0
    1
    2
    0 1
    2 3
    4 5
    6 7
     
    Sample Output
    0
    0 1
    2 1
    请看完这篇博文,看完就去AC吧。加了输入优化,效果并不明显。
    Accepted Code:
     1 /*************************************************************************
     2     > File Name: 1010.cpp
     3     > Author: Stomach_ache
     4     > Mail: sudaweitong@gmail.com
     5     > Created Time: 2014年08月05日 星期二 19时22分23秒
     6     > Propose: 
     7  ************************************************************************/
     8 
     9 #include <cmath>
    10 #include <string>
    11 #include <cstdio>
    12 #include <fstream>
    13 #include <cstring>
    14 #include <iostream>
    15 #include <algorithm>
    16 using namespace std;
    17 
    18 int n;
    19 int a[802][802], b[802][802], c[802][802];
    20 
    21 int read() {
    22     int res = 0;
    23     char c = ' ';
    24     while (c < '0' || c > '9') c = getchar();
    25     while (c >= '0' && c <= '9') res += c - '0', c = getchar();
    26     return res%3;
    27 }
    28 
    29 int main(void) {
    30       while (~scanf("%d", &n)) {
    31           for (int i = 0; i < n; i++) 
    32               for (int j = 0; j < n; j++)
    33                   a[i][j] = read();
    34         for (int i = 0; i < n; i++)
    35               for (int j = 0; j < n; j++)
    36                   b[i][j] = read();
    37         memset(c, 0, sizeof(c));
    38         for (int i = 0; i < n; i++) {
    39             for (int k = 0; k < n; k++) {
    40                   for (int j = 0; j < n; j++) {
    41                     c[i][j] += a[i][k] * b[k][j];      //注意这里的循环顺序
    42                 }
    43             }
    44         }
    45         for (int i = 0; i < n; i++) 
    46               for (int j = 0; j < n; j++)
    47                   printf("%d%c", c[i][j]%3, j == n-1 ? '
    ' : ' ');
    48     }
    49     return 0;
    50 }
  • 相关阅读:
    距离计算
    推荐系统
    jvm内存配置参数
    Vim 文件配置
    [转]linux shell 多线程实现
    synchronized 和 ReentrantLock 区别
    sptring boot 修改默认Banner
    Java容器类总结
    JAVA基本类型和包装类
    Linux 虚拟内存机制
  • 原文地址:https://www.cnblogs.com/Stomach-ache/p/3899133.html
Copyright © 2020-2023  润新知