zoukankan      html  css  js  c++  java
  • 【随机化算法】codeforces Matrix God

    http://codeforces.com/gym/101341

    【题意】

    • 给定三个方阵A,B,C,问AB=C是否成立?
    • 方阵的规模最大为1000

    【思路】

    • 求AB的时间复杂度为n*n*n,会超时
    • 左乘一个一行n列的向量,时间复杂度降为n*n

    【Accepted】

     1 #include<iostream>
     2 #include<cstdio> 
     3 #include<cstring>
     4 #include<string>
     5 #include<algorithm>
     6 #include<cmath>
     7 #include<queue>
     8 
     9 using namespace std;
    10 typedef long long ll;
    11 const int inf=0x3f3f3f3f;
    12 const int maxn=1e3+2;
    13 const ll mod=1e9+7;
    14 ll a[maxn][maxn],b[maxn][maxn],c[maxn][maxn],r[2][maxn],ra[2][maxn],rab[2][maxn],rc[2][maxn];
    15 int n,m;
    16 
    17 int main()
    18 {
    19     while(~scanf("%d",&n))
    20     {
    21         for(int i=1;i<=n;i++)
    22         {
    23             for(int k=1;k<=n;k++)
    24             {
    25                 scanf("%lld",&a[i][k]);
    26             }
    27          } 
    28         for(int i=1;i<=n;i++)
    29         {
    30             for(int k=1;k<=n;k++)
    31             {
    32                 scanf("%lld",&b[i][k]);
    33             }
    34          } 
    35         for(int i=1;i<=n;i++)
    36         {
    37             for(int k=1;k<=n;k++)
    38             {
    39                 scanf("%lld",&c[i][k]);
    40             }
    41          } 
    42         for(int i=1;i<=n;i++)
    43         {
    44             r[1][i]=rand()%100+1;
    45         }
    46         memset(ra,0,sizeof(ra));
    47         memset(rab,0,sizeof(rab));
    48         for(int i=1;i<=n;i++)
    49         {
    50             for(int k=1;k<=n;k++)
    51             {
    52                 ra[1][i]=(ra[1][i]+r[1][k]*a[k][i]%mod)%mod;
    53             }
    54         }
    55         for(int i=1;i<=n;i++)
    56         {
    57             for(int k=1;k<=n;k++)
    58             {
    59                 rab[1][i]=(rab[1][i]+ra[1][k]*b[k][i]%mod)%mod;
    60             }
    61         }
    62         for(int i=1;i<=n;i++)
    63         {
    64             for(int k=1;k<=n;k++)
    65             {
    66                 rc[1][i]=(rc[1][i]+r[1][k]*c[k][i]%mod)%mod;
    67             }
    68         }
    69         int flag=1;
    70         for(int i=1;i<=n;i++)
    71         {
    72             if(rab[1][i]!=rc[1][i])
    73             {    
    74                 flag=0;
    75                 break;
    76             }
    77         }
    78         if(flag)
    79         {
    80             puts("YES");
    81         }
    82         else
    83         {
    84             puts("NO");
    85         }
    86         
    87     }    
    88     return 0;
    89  } 
    View Code
  • 相关阅读:
    Openvswitch手册(6): QoS
    [转]linux VLAN配置(vconfig)
    [转]Understand QoS at OpenSwitch
    Openvswitch手册(5): VLAN and Bonding
    Openvswitch手册(4): Mirror
    Openvswitch手册(3): sFlow, netFlow
    Mysql主从复制(重置版)
    Mysql备份工具Xtrabackup
    Mysql用户管理
    Mysql备份工具mysqldump和mysqlhotcopy
  • 原文地址:https://www.cnblogs.com/itcsl/p/7202079.html
Copyright © 2011-2022 走看看