bzoj2396: 神奇的矩阵

与51nod1140一样。不过这题是多组数据的。。。坑。。。。

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#include<ctime>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define clr(x,c) memset(x,c,sizeof(x))
#define ll long long
int read(){
	int x=0,f=1;char c=getchar();
	while(!isdigit(c)){
		if(c=='-') f=-1;c=getchar();
	}
	while(isdigit(c)) x=x*10+c-'0',c=getchar();
	return x*f;
}
const int nmax=1005;
ll r[nmax],ra[nmax],rb[nmax],rc[nmax],a[nmax][nmax],b[nmax][nmax],c[nmax][nmax];
int main(){
	srand(1000007);
	int n;bool flag;
	while(scanf("%d",&n)==1){
	rep(i,1,n) rep(j,1,n) a[i][j]=read();
	rep(i,1,n) rep(j,1,n) b[i][j]=read();
	rep(i,1,n) rep(j,1,n) c[i][j]=read();
	rep(i,1,n) r[i]=rand()%1000,ra[i]=rb[i]=rc[i]=0;
	rep(j,1,n) rep(k,1,n) ra[j]+=r[k]*a[k][j];
	rep(j,1,n) rep(k,1,n) rb[j]+=ra[k]*b[k][j];
	rep(j,1,n) rep(k,1,n) rc[j]+=r[k]*c[k][j];
	flag=1;
	rep(i,1,n) if(rc[i]!=rb[i]){
		printf("No\n");flag=0;
	}
	if(flag) printf("Yes\n");
   }
   return 0;
}

  

2396: 神奇的矩阵

Time Limit: 5 Sec  Memory Limit: 512 MB
Submit: 1042  Solved: 298
[Submit][Status][Discuss]

Description

    给出三个行数和列数均为N的矩阵A、B、C,判断A*B=C是否成立。

 

Input


    题目可能包含若干组数据。
    对于每组数据,第一行一个数N,接下来给出三个N*N的矩阵,依次为A、B、C三个矩阵。

Output

    对于每组数据,若A*B=C成立,则输出Yes,否则No。每个答案占一行。

Sample Input

1
2
2
100

Sample Output

No

HINT

 

    对于90%的数据,N不超过100;

    对于100%的数据,N不超过1000,矩阵中的数字大于等于0小于1000,数据组数不超过5组。

 

Source

 
[Submit][Status][Discuss]
posted @ 2016-09-22 21:57  BBChq  阅读(370)  评论(0编辑  收藏  举报