[随机化 矩阵乘法] BZOJ 2396 神奇的矩阵 & 51Nod 1140 矩阵相乘结果的判断 & POJ 3318 Matrix Multiplication
2016-11-17 07:50
393 查看
不说了 经典
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define cl(x) memset(x,0,sizeof(x))
using namespace std;
typedef long long ll;
inline char nc(){
static char buf[100000],*p1=buf,*p2=buf;
if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; }
return *p1++;
}
inline void read(int &x){
char c=nc(),b=1;
for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1;
for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b;
}
const int N=505;
int n;
int A
,B
,C
;
int temp
;
int ans1
,ans2
;
inline void mul(int a
,int b
,int* ans){
int res
={0};
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
res[i]+=a[i][j]*b[j];
for (int i=1;i<=n;i++)
ans[i]=res[i];
}
inline bool check(){
for (int i=1;i<=n;i++)
if (ans1[i]!=ans2[i])
return false;
return true;
}
int main(){
freopen("t.in","r",stdin);
freopen("t.out","w",stdout);
int flag=0;
srand(10086);
read(n);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
read(A[i][j]);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
read(B[i][j]);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
read(C[i][j]);
for (int i=1;i<=5;i++) {
for (int j=1;j<=n;j++)
temp[j]=rand()%10+1;
mul(B,temp,ans1);
mul(A,ans1,ans1);
mul(C,temp,ans2);
if (!check())
flag=1;
}
if (flag)
printf("No\n");
else
printf("Yes\n");
return 0;
}
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define cl(x) memset(x,0,sizeof(x))
using namespace std;
typedef long long ll;
inline char nc(){
static char buf[100000],*p1=buf,*p2=buf;
if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; }
return *p1++;
}
inline void read(int &x){
char c=nc(),b=1;
for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1;
for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b;
}
const int N=505;
int n;
int A
,B
,C
;
int temp
;
int ans1
,ans2
;
inline void mul(int a
,int b
,int* ans){
int res
={0};
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
res[i]+=a[i][j]*b[j];
for (int i=1;i<=n;i++)
ans[i]=res[i];
}
inline bool check(){
for (int i=1;i<=n;i++)
if (ans1[i]!=ans2[i])
return false;
return true;
}
int main(){
freopen("t.in","r",stdin);
freopen("t.out","w",stdout);
int flag=0;
srand(10086);
read(n);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
read(A[i][j]);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
read(B[i][j]);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
read(C[i][j]);
for (int i=1;i<=5;i++) {
for (int j=1;j<=n;j++)
temp[j]=rand()%10+1;
mul(B,temp,ans1);
mul(A,ans1,ans1);
mul(C,temp,ans2);
if (!check())
flag=1;
}
if (flag)
printf("No\n");
else
printf("Yes\n");
return 0;
}
相关文章推荐
- 51Nod-1140-矩阵相乘结果的判断
- 51nod-1140-矩阵相乘结果的判断
- 51NOD 1140 矩阵相乘结果的判断(随机化算法+矩阵结合率)
- 51nod 1140 矩阵相乘结果的判断
- 51nod 1140 矩阵相乘结果的判断
- 51nod 1140 矩阵相乘结果的判断
- [bzoj2396][随机化]神奇的矩阵
- poj 3318 随机(矩阵相乘判断)
- POJ 3318 Matrix Multiplication【矩阵相乘——随机化检测】
- BZOJ2396 神奇的矩阵 【随机化 + 矩乘】
- POJ 3318 Matrix Multiplication 解题报告 (随机化 & 矩阵性质)
- 51nod oj 1140 矩阵相乘结果的判断【矩阵的结合律】
- [bzoj2396][随机化]神奇的矩阵
- POJ 3318 两个大矩阵相乘是否与另一矩阵结果相等
- [GarsiaWachs算法] BZOJ 3229 [Sdoi2008]石子合并 & POJ 1738 An old Stone Game & 51Nod 1023 石子归并 V3
- 【BZOJ】【2738】&【Tsinsen】【A1333】矩阵乘法
- 【BZOJ 2396】神奇的矩阵 矩阵+随机
- [多线程DP 费用流] 51Nod 1084 矩阵取数问题 V2 & POJ 3422 Kaka's Matrix Travels
- 【bzoj】3329: Xorequ 【DP】【快速幂&&矩阵乘法】
- 数学(矩阵乘法,随机化算法):POJ 3318 Matrix Multiplication