• [ICPC2020济南A] Matrix Equation


    [ICPC2020济南A] Matrix Equation - 线性基

    Description

    给一个 A 矩阵 一个 B 矩阵(矩阵元素为 0 或 1),求有多少个 C 矩阵 满足 A X C = B . C (叉乘 和 直积)。(n le 200)

    Solution

    C 的每一列是相互无关的,分开考虑,转化为解 (n) 个线性方程组的个数,实际上就是求系数矩阵的秩,用 bitset 线性基即可

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    const int mod = 998244353;
    
    int a[205][205], b[205][205];
    
    int qpow(int p, int q)
    {
        return (q & 1 ? p : 1) * (q ? qpow(p * p % mod, q / 2) : 1) % mod;
    }
    
    struct LinearBase
    {
        // bitset<205> a[205];
        vector<bitset<205>> a;
    
        LinearBase()
        {
            a.resize(205);
        }
        int ans = 0;
        void insert(bitset<205> k)
        {
            for (int j = 204; j >= 0; j--)
            {
                if ((k >> j)[0])
                {
                    if (a[j] == 0)
                    {
                        a[j] = k;
                        ans++;
                        break;
                    }
                    else
                    {
                        k ^= a[j];
                    }
                }
            }
        }
    };
    
    signed main()
    {
        int n;
        cin >> n;
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= n; j++)
                cin >> a[i][j];
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= n; j++)
                cin >> b[i][j];
    
        int ans = 0;
        for (int c = 1; c <= n; c++)
        {
            LinearBase lb;
            for (int i = 1; i <= n; i++)
            {
                bitset<205> tmp;
                for (int j = 1; j <= n; j++)
                {
                    tmp[j] = a[i][j];
                    if (i == j && b[i][c])
                        tmp[j] = 1 - tmp[j];
                }
                lb.insert(tmp);
            }
            ans += n - lb.ans;
        }
    
        cout << qpow(2, ans) << endl;
    }
    
    
  • 相关阅读:
    uva 10370
    uva 10107
    uva 10038
    uva 488
    伪代码格式
    公众号的秘密,知道一个biz就够了
    ToolTip 概述
    swt
    Java GUI图形界面开发工具
    Java多线程-两个小球
  • 原文地址:https://www.cnblogs.com/mollnn/p/14563060.html
Copyright © 2020-2023  润新知