此题的关键在于找到矩阵乘法的不变式!
例如:
矩阵a × 矩阵b = 矩阵ab
1 2 5 6
×
3 4 7 8
显然 ab[0] = a[0] * b[0] + a[1] * b[2]
ab[1] = a[0] * b[1] + a[1] * b[3]
ab[2] = a[0] * b[0] + a[3] * b[2]
ab[3] = a[0] * b[1] + a[3] * b[3]
由此可以找出一个规律:
ab[i] = a[n*(i/n) + 0] * b[i%n + 0 * n] + a[n*(i/n) + 1] * b[i%n + 1 * n] + ... +a[n*(i/n) + n - 1] * b[i%n + (n-1)*n]
不变式找到了就可以很容易的写出代码!
#include<iostream>
#include<iterator>
#include<algorithm>
#include<vector>
using namespace std;
bool can(string a,string b)
{
if(a.size() != b.size())
return false;
return true;
}
int main()
{
int n;
cin >> n;
vector<int> a(n * n),b(n * n),ab(n * n, 0);
for(int i = 0; i < n * n; ++i)
cin >> a[i];
for(int i = 0; i < n * n; ++i)
cin >> b[i];
for(int i = 0; i < n * n; ++i)
{
for(int j = 0; j < n; ++j)
ab[i] += a[n * (i / n) + j] * b[i % n + j*n];
}
copy(ab.begin(), ab.end(), ostream_iterator<int> (cout, " "));
cout<<"\n";
return 0;
}