1 条题解

  • 0
    @ 2025-10-8 16:54:48
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const LL P=1e9+7;
    struct node
    {
        LL a[511][511];
        node(){memset(a,0,sizeof a);}
    };
    int n,p,m;
    node operator*(node A,node B)
    {
        node C; 
        for (int i=1;i<=n;i++)
            for (int j=1;j<=m;j++)
                for (int k=1;k<=p;k++)
                    C.a[i][j]=(C.a[i][j]+ A.a[i][k]*B.a[k][j])%P;
    /*当矩阵中有负数时,
    C.a[i][j]=(C.a[i][j]+ A.a[i][k]*B.a[k][j])%P无法保证和手工计算一致。
    */
        for (int i=1;i<=n;i++)
            for (int j=1;j<=m;j++)
                    C.a[i][j]=(C.a[i][j]+P)%P;
        return C;
    }
    
    int main()
    {
        scanf("%d%d%d",&n,&p,&m);
        node A;
        for(int i=1;i<=n;i++)for(int j=1;j<=p;j++)scanf("%lld",&A.a[i][j]);
        node B;
        for(int i=1;i<=p;i++)for(int j=1;j<=m;j++)scanf("%lld",&B.a[i][j]);
        node C=A*B;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<m;j++)printf("%lld ",C.a[i][j]);
            printf("%lld\n",C.a[i][m]);
        }
        return 0;
    }
    
    • 1

    信息

    ID
    933
    时间
    2000ms
    内存
    256MiB
    难度
    8
    标签
    (无)
    递交数
    307
    已通过
    55
    上传者