【BZOJ 2396】神奇的矩阵 矩阵+随机
2017-02-05 11:40
274 查看
其实不要放过题目给出的每一个信息,就像这一道题,思考为什么一定是矩阵,为什么不是一个简单的数列之内的,说明解决这一道题就很用到矩阵的特殊性质。其中矩阵有一个性质就是A*B=C,C的行数等于A的行数,C的列数等于B的列数,所以我们完全可以随机构造一个n行1列的举证,然后利用矩阵乘法的结合律把矩阵变成n行1列的新矩阵,然后判断。
#include<cstdio> #include<cstring> #include<iostream> #define maxn 1010 #define REP(i,b) for(int i=1;i<=b;i++) #include<cstdlib> using namespace std; int A[maxn][maxn],B[maxn][maxn],C[maxn][maxn],T,n; int ans1[maxn],ans2[maxn],ans3[maxn],rad[maxn]; int read(){ int x=0;char c=getchar(); for(;c>'9'||c<'0';c=getchar()); for(;c>='0'&&c<='9';c=getchar())x=x*10+c-'0'; return x; } void mull(int a[maxn][maxn],int b[maxn],int s[maxn]){ for(int i=1;i<=n;i++){ s[i]=0; for(int k=1;k<=n;k++){ s[i]+=a[i][k]*b[k]; } } } int main(){ while(scanf("%d",&n)!=EOF){ srand(n*233); REP(i,n)rad[i]=rand(); REP(i,n)REP(j,n)A[i][j]=read(); REP(i,n)REP(j,n)B[i][j]=read(); REP(i,n)REP(j,n)C[i][j]=read(); mull(B,rad,ans1); mull(A,ans1,ans2); mull(C,rad,ans3); bool ok=false; for(int i=1;i<=n;i++){ if(ans2[i]!=ans3[i]){ok=true;break;} }if(ok)puts("No"); else puts("Yes"); } return 0; }
相关文章推荐
- bzoj 2396: 神奇的矩阵 随机化
- BZOJ[2396]神奇的矩阵 随机化
- bzoj2396神奇的矩阵 随机化
- bzoj2396 POJ3318 神奇的矩阵 随机化
- [随机化 矩阵乘法] BZOJ 2396 神奇的矩阵 & 51Nod 1140 矩阵相乘结果的判断 & POJ 3318 Matrix Multiplication
- 神奇的矩阵(bzoj 2396)
- BZOJ2396 神奇的矩阵
- [bzoj2396][随机化]神奇的矩阵
- BZOJ2396 神奇的矩阵 【随机化 + 矩乘】
- 【BZOJ2396 || POJ3318】神奇的矩阵 || Matrix Multiplication
- bzoj2396 神奇的矩阵
- bzoj2396 神奇的矩阵
- [bzoj2396][随机化]神奇的矩阵
- 2396: 神奇的矩阵
- 【bzoj2396】神奇的矩阵 随机化
- BZOJ 1059 矩阵游戏(神奇的二分图匹配)
- BZOJ 1009 [HNOI2008]GT考试 矩阵乘法+DP
- [bzoj2462] [BeiJing2011]矩阵模板
- BZOJ 1009 KMP思想 + DP + 矩阵快速幂
- [BZOJ1006][[HNOI2008]神奇的国度][MCS,完美消除序列]