POJ - 3318 Matrix Multiplication(随机化算法)

4人阅读 评论(0) 收藏 举报
分类:

You are given three n × n matrices AB 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 AB and 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
Hint
Multiple inputs will be tested. So O(n 3) algorithm will get TLE.
#include<iostream>
#include<ctime>
using namespace std;
const int maxn = 505;
int A[maxn][maxn];
int B[maxn][maxn];
int C[maxn][maxn];
int main()
{
     int N;
     while(cin >> N)
     {
           bool flag=true;

     for (int i = 1; i <=N; i++)
        for (int j = 1; j <=N; j++)
     {
             scanf("%d",&A[i][j]);
     }

     for (int i = 1; i <=N; i++)
        for (int j = 1; j <=N; j++)
     {
             scanf("%d",&B[i][j]);
     }

     for (int i = 1; i <=N; i++)
        for (int j = 1; j <=N; j++)
     {
             scanf("%d",&C[i][j]);
     }

     srand((unsigned)time(NULL));
     for (int i = 0; i< 77777;i++)
     {
             int h = rand()%N + 1,l = rand()%N + 1;
             int temp = 0;
             for (int j = 1;j <=N;j++)
             {
                     temp += A[h][j] * B[j][l] ;
             }
             if(temp != C[h][l])
             {
                     flag = false;
                     break;
             }
     }

     if(flag)
     {
             cout<<"YES"<<endl;
     }
     else{
        cout<<"NO"<<endl;
     }
     }


}


查看评论

实战进阶学习Unity3d游戏开发

-
  • 1970年01月01日 08:00

POJ 3318 Matrix Multiplication 随机化算法

题意: 给出三个n*n的矩阵A,B,C看是否A*B=C; #include #include #include #include #include #include #include #defin...
  • became_a_wolf
  • became_a_wolf
  • 2016-09-02 21:59:39
  • 164

poj3318(随机化算法)

链接:点击打开链接 题意:给出三个n*n的矩阵A,B,C,问是否存在A*B=C(n 代码:#include #include #include #include #include #in...
  • stay_accept
  • stay_accept
  • 2017-04-09 14:17:18
  • 324

POJ 3318 Matrix Multiplication

Matrix MultiplicationTime Limit: 2000MSMemory Limit: 65536KTotal Submissions: 6414Accepted: 1186Desc...
  • tao_tao_bu_jue
  • tao_tao_bu_jue
  • 2008-08-08 09:56:00
  • 2523

POJ ~ 3318 ~ Matrix Multiplication (随机化算法)

题意:给你A,B,C三个矩阵,问A*B==C? n^3会超时。思路:玄学题?计算C矩阵中一个点的值的复杂度为O(N),所以我们随机一个C矩阵中的点,然后计算该位置的值,如果和C矩阵不一样,那么证明不等...
  • ZscDst
  • ZscDst
  • 2018-04-18 16:50:48
  • 12

POJ 3318 Matrix Multiplication(随机化算法)

给你三个矩阵A,B,C。让你判断A*B是否等于C。 随机一组数据,然后判断乘以A,B之后是否与乘C之后相等。 很扯淡的啊,感觉这种算法不严谨啊、、、 Matrix Multiplicat...
  • xu12110501127
  • xu12110501127
  • 2014-08-04 20:09:39
  • 907

[ACM] POJ 3318 Matrix Multiplication (随机化算法)

Matrix Multiplication Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1...
  • sr19930829
  • sr19930829
  • 2014-07-28 21:20:46
  • 2215

POJ---3318-Matrix Multiplication 水

Matrix Multiplication Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1...
  • qq978874169
  • qq978874169
  • 2015-10-13 17:14:04
  • 275

POJ 3318 Matrix Multiplication

题目大意: 给出矩阵a,b,c。验证a*b是否等于c。 解题思路: 三次方复杂度的算法, 正常情况下是过不了的。但是输入优化后可以过。 再有就是随机验证。 第二种没有啥意思,...
  • lin375691011
  • lin375691011
  • 2014-08-12 18:08:50
  • 4471

Poj 3318 Matrix Multiplication

随机算法 直接随机i,j会跪,因为可能只有一个格子不一样但是没有随机到 为了有效利用所有数据 (看了题解)可以构造列向量X,使得ABX=CX 利用了所有数据,很有效的O(n^2)判定 哪怕t...
  • ronnoc
  • ronnoc
  • 2013-05-13 23:46:26
  • 482
    个人资料
    持之以恒
    等级:
    访问量: 724
    积分: 572
    排名: 9万+
    文章存档
    最新评论