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 }