zoukankan      html  css  js  c++  java
  • 数学&模拟:随机化-矩阵随机化

    BZOJ2396

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

    随机生成一个N乘1的矩阵R

    然后判断A*B*R是否等于C*R,而前者相当于A*(B*R)

    与后者一样都可以在O(N2)的时间里算出来

    如果算出来的结果相等

    A*B和C几乎也相等

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstdlib>
     4 using namespace std;
     5 int n;
     6 int a[1001][1001],b[1001][1001],c[1001][1001];
     7 int rnd[1001],ans1[1001],ans2[1001]; 
     8 void mmul(int a[1001],int b[1001][1001],int s[1001])
     9 {
    10     int tmp[1001];
    11     for(int j=1;j<=n;j++)
    12     {
    13         tmp[j]=0;
    14         for(int k=1;k<=n;k++)
    15            tmp[j]+=a[k]*b[k][j];
    16     }
    17     for(int i=1;i<=n;i++)s[i]=tmp[i];
    18 }
    19 bool jud()
    20 {
    21     for(int i=1;i<=n;i++)
    22         if(ans1[i]!=ans2[i])return 0;
    23     return 1;
    24 }
    25 int main()
    26 {
    27     for(int i=1;i<=1000;i++)rnd[i]=rand();
    28     while(scanf("%d",&n)!=EOF)
    29     {
    30         for(int i=1;i<=n;i++)
    31             for(int j=1;j<=n;j++)
    32                 scanf("%d",&a[i][j]);
    33         for(int i=1;i<=n;i++)
    34             for(int j=1;j<=n;j++)
    35                 scanf("%d",&b[i][j]);
    36         for(int i=1;i<=n;i++)
    37             for(int j=1;j<=n;j++)
    38                 scanf("%d",&c[i][j]);
    39         mmul(rnd,a,ans1);
    40         mmul(ans1,b,ans1);
    41         mmul(rnd,c,ans2);
    42         if(jud())printf("Yes
    ");
    43         else printf("No
    ");
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    [BZOJ2661][BeiJing wc2012]连连看 费用流
    <meta> 标签
    CSS3 Transitions, Transforms和Animation的使用
    word-wrap和word-break的区别吗?
    css3中比较少用到的属性记录
    CSS ::Selection的使用方法
    CSS 属性
    javascript正则表达式语法
    jquery metadata 详解
    关于window.console&&console.log(123)的思考
  • 原文地址:https://www.cnblogs.com/aininot260/p/9635786.html
Copyright © 2011-2022 走看看