题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4920
Matrix multiplication
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1405 Accepted Submission(s): 621
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.
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 A ij. The next n lines describe the matrix B in similar format (0≤A ij,B ij≤10 9).
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 A ij. The next n lines describe the matrix B in similar format (0≤A ij,B ij≤10 9).
Output
For each tests:
Print n lines. Each of them contain n integers -- the matrix A×B in similar format.
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
如果不用输入、输出外挂的话,用G++交就会TLE,但是用C++或C交却会AC,且C的运行时间比C++小一点;
而如果用输入、输出外挂的话,用G++和C++都会过,运行时间G++>C++>C,C++与C时间差一点,但G++和它们就差了蛮多的
AC代码:
#include <stdio.h>
#include <string.h>
int a[805][805],b[805][805],c[805][805];
int Scan(){//输入外挂
int res=0,ch;
ch=getchar();
if(ch>='0'&&ch<='9')
res=ch-'0';
while((ch=getchar())>='0'&&ch<='9')
res=res*10+ch-'0';
return res;
}
void Out(int a){//输出外挂
if(a>9)
Out(a/10);
putchar(a%10+'0');
}
void mul(int n){
int i,j,k;
memset(c,0,sizeof(c));
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(a[i][j]!=0)
for(k=0;k<n;k++)
c[i][k]=(c[i][k]+a[i][j]*b[j][k])%3;
}
int main(){
int n,i,j,k;
while(~scanf("%d",&n)){
for(i=0;i<n;i++){
for(j=0;j<n;j++){
a[i][j]=Scan();
//scanf("%d",&a[i][j]);
a[i][j]%=3;
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
b[i][j]=Scan();
//scanf("%d",&b[i][j]);
b[i][j]%=3;
}
}
mul(n);
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(j)
printf(" ");
Out(c[i][j]);
}
printf("\n");
}
}
return 0;
}