Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1559731
  • 博文数量: 327
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 3556
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-05 21:28
个人简介

东黑布衣,流浪幽燕。 真诚善良,值得信赖。

文章分类

全部博文(327)

我的朋友

分类: BSD

2018-03-26 18:05:43

给出三个N*N的矩阵A, B, C,问A * B是否等于C?
Input
第1行,1个数N。(0 <= N <= 500)
第2 - N + 1行:每行N个数,对应矩阵A的元素。(0 <= M[i] <= 16)
第N + 2 - 2N + 1行:每行N个数,对应矩阵B的元素。(0 <= M[i] <= 16)
第2N + 2 - 3N + 1行:每行N个数,对应矩阵C的元素。
Output
如果相等输出Yes,否则输出No。
H*A*B=H*C
随机几个H看能不能满足这个式子就好啦。


  1. // 1140matrixmultiply.cpp : Defines the entry point for the console application.
  2. //

  3. #include "stdafx.h"
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <memory.h>

  7. const int maxn=1e3+5;
  8. const int maxx=1e5+100;

  9. int a[maxn][maxn],b[maxn][maxn],c[maxn][maxn];
  10. int ans1[maxn],ans2[maxn],ans3[maxn],rnd[maxn];
  11. int n;

  12. inline int Scan()
  13. {
  14.     int res=0,ch,flag=0;
  15.     if((ch=getchar())=='-')
  16.        flag=1;
  17.     else if(ch>='0' && ch<='9')
  18.        res=ch-'0';
  19.     while((ch=getchar())>='0'&&ch<='9')
  20.        res=res*10+ch-'0';
  21.     return flag ? -res : res;
  22. }
  23. int main(int argc, char* argv[])
  24. {
  25.     //srand();
  26.    int i,j,cnt;
  27.    if(NULL==freopen("51nod1140i.txt","r",stdin))
  28.       return -1;
  29.     scanf("%d",&n);
  30.     for(i=1;i<=n;i++)
  31.         for (j=1; j<=n; j++)
  32.             a[i][j]=Scan();
  33.     for(i=1;i<=n;i++)
  34.         for (j=1; j<=n; j++)
  35.             b[i][j]=Scan();
  36.     for(i=1;i<=n;i++)
  37.         for (j=1; j<=n; j++)
  38.             c[i][j]=Scan();
  39.     cnt=20;
  40.     while(cnt--){
  41.         memset(ans1,0,sizeof(ans1));
  42.         memset(ans2,0,sizeof(ans2));
  43.         memset(ans3,0,sizeof(ans3));
  44.         for(i=1;i<=n;i++)
  45.             rnd[i]=(long long)rand()%16;
  46.         for(i=1;i<=n;i++)
  47.             for (j=1; j<=n; j++)
  48.                 ans1[i]+=rnd[j]*a[j][i];
  49.          for(i=1;i<=n;i++)
  50.             for (j=1; j<=n; j++)
  51.                 ans2[i]+=ans1[j]*b[j][i];
  52.          for(i=1;i<=n;i++)
  53.             for (j=1; j<=n; j++)
  54.                 ans3[i]+=rnd[j]*c[j][i];
  55.         for(i=1;i<=n;i++)
  56.             if(ans2[i]!=ans3[i]){
  57.                puts("No");
  58.                return 0;
  59.             }
  60.     }
  61.     puts("Yes");
  62.     return 0;
  63. }
  64. /*
  65. IN:
  66. 2
  67. 1 0
  68. 0 1
  69. 0 1
  70. 1 0
  71. 0 1
  72. 1 0
  73. OUT:
  74. Yes
  75. */






阅读(1347) | 评论(0) | 转发(0) |
0

上一篇:LC0018

下一篇:[20180310 PRO] Map Completion V2

给主人留下些什么吧!~~