• FZU 1704 Turn off the light


    FZU_1704

        在转化成同余方程组后需要确定变元的个数n,由于变元一旦确定就可以唯一确定一种方案,所以最后的方案种数就2^n,而变元的个数n就是M减去矩阵的秩。

    import java.math.BigInteger;
    import java.util.Scanner;
    
    public class Main {
        static int N, M;
        static int[][] mat = new int[110][110];
        static Scanner cin = new Scanner(System.in);
        public static void main(String[] args) {
            int t = cin.nextInt();
            while(t != 0)
            {
                -- t;
                init();
                BigInteger ans = gauss();
                System.out.println(ans);
            }
        }
        static void init()
        {
            int i, j, k, n;
            N = cin.nextInt();
            M = cin.nextInt();
            for(i = 0; i < N; i ++)
                for(j = 0; j <= M; j ++)
                    mat[i][j] = 0;
            for(i = 0; i < N; i ++)
                mat[i][M] = cin.nextInt();
            for(i = 0; i < M; i ++)
            {
                n = cin.nextInt();
                for(j = 0; j < n; j ++)
                {
                    k = cin.nextInt();
                    mat[k - 1][i] = 1;
                }
            }
        }
        static BigInteger gauss()
        {
            int i, j, x, y, t;
            for(i = j = 0; i < N && j < M; i ++, j ++)
            {
                if(mat[i][j] == 0)
                {
                    for(x = i + 1; x < N; x ++)
                        if(mat[x][j] == 1)
                        {
                            for(y = j; y <= M; y ++)
                            {
                                t = mat[i][y];
                                mat[i][y] = mat[x][y];
                                mat[x][y] = t;
                            }
                            break;
                        }
                    if(x == N)
                    {
                        -- i;
                        continue;
                    }
                }
                for(x = i + 1; x < N; x ++)
                    if(mat[x][j] == 1)
                    {
                        for(y = j; y <= M; y ++)
                            mat[x][y] ^= mat[i][y];
                    }
            }
            BigInteger ans = new BigInteger("2");
            ans = ans.pow(M - i);
            return ans;
        }
    }
  • 相关阅读:
    INFO: InstallShield不同版本对中文字符串的支持程度
    Basic INFO: InstallShield 2012安装过程
    [Android] 打印Log的行号、函数、类名
    gridgian 网格计算
    Activity及Dialog的全透明
    设计工具
    ps 多图层扣图
    spket js ide
    a 的样式
    js开发规范
  • 原文地址:https://www.cnblogs.com/staginner/p/2498467.html
Copyright © 2020-2023  润新知