首页 > 代码库 > hdu 4920 快速矩阵相乘 以后得换一种写法了

hdu 4920 快速矩阵相乘 以后得换一种写法了

 

【题意】:求两个矩阵相乘的结果 

 

 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 using namespace std; 5 #define mod 3 6  7 int a[808][802],b[808][802]; 8 int c[808][808],n; 9 10 void mul()11 {12     for(int i=0; i<n; i++)13         for(int j=0; j<n; j++)14             if(a[i][j])15             {16                 for(int k=0; k<n; k++)17                     //if(b[j][k])    加了这一句居然就超时了 实在不晓得是为什么18                     c[i][k]=(c[i][k]+a[i][j]*b[j][k]);19                 //取模运算是最耗时的运算 经计算这里不会超过数据范围 所以不要一步一取模,最后一步来取余就可以了20             }21 }22 23 int main()24 {25     int i,j,m,t;26     while(~scanf("%d",&n))27     {28         for(i=0; i<n; i++)29             for(j=0; j<n; j++)30                {31                     scanf("%d",&a[i][j]);32                     a[i][j]%=3;33                }34         for(i=0; i<n; i++)35             for(j=0; j<n; j++)36             {37                 scanf("%d",&b[i][j]);38                 b[i][j]%=3;39             }40         memset(c,0,sizeof(c));41         mul();42         for(i=0; i<n; i++)43         {44             printf("%d",c[i][0]%3);45             for(j=1; j<n; j++)46                 printf(" %d",c[i][j]%3);47             printf("\n");48         }49     }50     return 0;51 }