Pre
交不了,代码在这里。
有一个注意点。
Solution
随机一个矩阵与两边相乘。
Code
#include<bits/stdc++.h>
#define xx first
#define yy second
#define ll long long
using namespace std;
const int N = 1000 + 5, M = 1000;
int n;
bool flag;
struct Matrix1 {
int info[N][N];
}a, b, c;
struct Matrix2 {
int info[N];
Matrix2 () {
memset (info, 0, sizeof (info));
}
}k;
inline void solve () {
if (!flag) {
return ;
}
for (int i = 1; i <= n; ++i) {
k.info[i] = rand () % 100 + 1;
}
Matrix2 rr;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
rr.info[i] += c.info[i][j] * k.info[j];
}
}
Matrix2 L, lst;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
L.info[i] += b.info[i][j] * k.info[j];
}
}
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
lst.info[i] += a.info[i][j] * L.info[j];
}
}
for (int i = 1; i <= n; ++i) {
if (lst.info[i] != rr.info[i]) {
flag = false;
return ;
}
}
}
int main () {
srand (19491001);
while (scanf ("%d", &n) == 1) {
flag = true;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
scanf ("%d", &a.info[i][j]);
}
}
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
scanf ("%d", &b.info[i][j]);
}
}
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
scanf ("%d", &c.info[i][j]);
}
}
solve ();
solve ();
solve ();
if (flag) {
printf ("Yes
");
}
else {
printf ("No
");
}
}
return 0;
}
Conclusion
注意,函数传入的不能是矩阵,不信自己试(炸空间)。