Matrix Multiplication
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 17441 | Accepted: 3778 |
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
给出3个n*n的矩阵A,B,C 问 A*B = C ?
C[i][j] 的值 等于 A中第i行每个数 与 B中第j列中对应每个数 的乘积的和
随机生成C中一些点的坐标来进行判断
import java.util.*; import java.math.*; import java.io.*; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { InputStreamReader st = new InputStreamReader(System.in); BufferedReader cin = new BufferedReader(st); int n = Integer.parseInt(cin.readLine()); long a[][] = new long[n][n]; long b[][] = new long[n][n]; long c[][] = new long[n][n]; for(int i = 0; i < n; i++){ String[] ss = cin.readLine().split(" "); for(int j = 0; j < n; j++){ a[i][j] = Integer.parseInt(ss[j]); } } for(int i = 0; i < n; i++){ String[] ss = cin.readLine().split(" "); for(int j = 0; j < n; j++){ b[i][j] = Integer.parseInt(ss[j]); } } for(int i = 0; i < n; i++){ String[] ss = cin.readLine().split(" "); for(int j = 0; j < n; j++){ c[i][j] = Integer.parseInt(ss[j]); } } boolean flag = true; Random s = new Random(); //WA的话 多交几次,总有过的时候。。。 for(int i = 0; i < 50000; i++){ int x = s.nextInt(n); int y = s.nextInt(n); long sum = 0; for(int j = 0; j < n; j++){ sum += a[x][j] * b[j][y]; } if( sum != c[x][y]){ flag = false; break; } } if(flag) { System.out.println("YES"); } else { System.out.println("NO"); } } }