Description
You are given three n × n matrices A, B and C. Does the equation A × B = C hold true?
Input
The first line of input contains a positive integer n (n ≤ 500) followed by the the three matrices A, B and C respectively. Each matrix's description is a block of n × n integers.
It guarantees that the elements of A and B are less than 100 in absolute value and elements of C are less than 10,000,000 in absolute value.
Output
Output "YES" if the equation holds true, otherwise "NO".
Sample Input
2 1 0 2 3 5 1 0 8 5 1 10 26
Sample Output
YES
#include <iostream> #include <cstdio> #include <cstring> #include <ctime> using namespace std; #define maxn 808 struct Matrix { int a[maxn][maxn]; }matrix[4]; int main() { //freopen("in.txt","r",stdin); int n; srand((unsigned)time(NULL)); while(scanf("%d",&n)!=EOF) { for(int i = 1;i <= 3;i++) { for(int j = 1;j <= n;j++) { for(int k = 1;k <= n;k++) { scanf("%d",&matrix[i].a[j][k]); } } } bool flag = true; for(int i = 1;i <= 65000;i++) { int r = rand()%n+1,c = rand()%n+1; int sum = 0; for(int j = 1;j <= n;j++) { sum += matrix[1].a[r][j] * matrix[2].a[j][c]; } if(sum != matrix[3].a[r][c]) { flag = false; break; } } if(flag) printf("YES\n"); else printf("NO\n"); } return 0; }