[bzoj2396][随机化]神奇的矩阵
2018-02-04 19:15
267 查看
2396: 神奇的矩阵
Time Limit: 5 Sec Memory Limit: 512 MB
Submit: 1322 Solved: 418
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1
2
2
100
Sample Output
No
HINT
Source
[Submit][Status][Discuss]
Time Limit: 5 Sec Memory Limit: 512 MB
Submit: 1322 Solved: 418
[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]
sol:
n^3不能过,所以把a*b*一个random的列矩阵,把c也乘上去,多随机几次大概率就是对的了#include<cstdio> #include<algorithm> #include<string> #include<cstring> #include<cstdlib> #include<cmath> #include<iostream> using namespace std; int n,m; inline int read() { char c; int res,flag=0; while((c=getchar())>'9'||c<'0') if(c=='-')flag=1; res=c-'0'; while((c=getchar())>='0'&&c<='9') res=(res<<3)+(res<<1)+c-'0'; return flag?-res:res; } const int N=1100; int a[N][N],b[N][N],c[N][N]; inline void init(int a[N][N]) { for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) a[i][j]=read(); } inline void trans(int a[N][N],int b[N][N]) { for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) b[i][j]=a[i][j]; } int sa[N][N],sb[N][N],sc[N][N],sd[N][N],tmp[N][N]; inline void mul(int a[N][N],int b[N][N],int c[N][N]) { memset(tmp,0,sizeof(tmp)); for(int i=1;i<=n;++i) for(int k=1;k<=n;++k) tmp[i][1]+=b[i][k]*a[k][1]; for(int i=1;i<=n;++i) c[i][1]=tmp[i][1],tmp[i][1]=0; } inline bool cmp(int a[N][N],int b[N][N]) { for(int i=1;i<=n;++i) if(a[i][1]!=b[i][1]) return 0; return 1; } int main() { // freopen("2396.in","r",stdin); // freopen(".out","w",stdout); while(scanf("%d",&n)!=EOF) { init(a); init(b); init(c); bool pd=1; int t=10; trans(a,sa); while(t--) { for(int i=1;i<=n;++i) sd[i][1]=rand()%1000+1; trans(b,sb); trans(c,sc); mul(sd,sb,sb); mul(sb,sa,sb); mul(sd,sc,sc); if(!cmp(sb,sc)) { pd=0; printf("No\n"); break; } } if(pd) printf("Yes\n"); } }
相关文章推荐
- [bzoj2396][随机化]神奇的矩阵
- BZOJ2396 神奇的矩阵 【随机化 + 矩乘】
- [随机化 矩阵乘法] BZOJ 2396 神奇的矩阵 & 51Nod 1140 矩阵相乘结果的判断 & POJ 3318 Matrix Multiplication
- bzoj2396 神奇的矩阵
- bzoj2396 POJ3318 神奇的矩阵 随机化
- BZOJ2396 神奇的矩阵
- 【BZOJ 2396】神奇的矩阵 矩阵+随机
- 【BZOJ2396 || POJ3318】神奇的矩阵 || Matrix Multiplication
- bzoj2396 神奇的矩阵
- bzoj 2396: 神奇的矩阵 随机化
- 神奇的矩阵(bzoj 2396)
- bzoj2396神奇的矩阵 随机化
- BZOJ[2396]神奇的矩阵 随机化
- bzoj2396: 神奇的矩阵(矩阵乘法+随机化)
- BZOJ 1059 矩阵游戏(神奇的二分图匹配)
- 【BZOJ-3243】向量内积 随机化 + 矩阵
- 2396: 神奇的矩阵
- 【bzoj2396】神奇的矩阵 随机化
- [BSGS 矩阵 随机化] BZOJ 4128 Matrix
- 【BZOJ】3790 神奇项链