zoukankan      html  css  js  c++  java
  • P5159 WD与矩阵

    思路

    奇怪的结论题
    考虑增量构造,题目要求每行每列都有偶数个1,奇偶性只需要增减1就能够调整了,所以最后一列一行一定能调整前面n-1阶矩阵的值,所以前面可以任选
    答案是(2^{(n-1)(m-1)})

    当时怎么也考虑不清楚最后一行和最后一列交点的值,但是莽了一发发现对了。。
    看了shadowice1984的题解之后才学会了证明
    假设每行填的都是一个二进制数,最后一行填的必然是前面的异或和
    因为每行的数都有偶数个二进制位,对于异或,有(bitcount(aoplus b)=bitcount(a)+bitcount(b)-2 imes bitcount(a & b))
    所以最后一行必然有偶数个二进制位,必然合法
    另外,长度为m的二进制数有偶数个二进制位的恰好有(2^{m-1})

    代码

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #define int long long
    using namespace std;
    const int MOD = 998244353;
    int n,m;
    int pow(int a,int b){
        int ans=1;
        while(b){
            if(b&1)
                ans=(ans*a)%MOD;
            a=(a*a)%MOD;
            b>>=1;
        }
        return ans;
    }
    signed main(){
        int T;
        scanf("%lld",&T);
        while(T--){
            scanf("%lld %lld",&n,&m);
            printf("%lld
    ",pow(2,(n-1)*(m-1)));
        }
        return 0;
    }
    
  • 相关阅读:
    读书笔记第四章
    读书笔记第三章
    读书笔记第二章
    读书笔记第一章
    第十章 读书笔记
    第九章 读书笔记
    第八章读书笔记
    第七章读书笔记
    第六章读书笔记
    第五章读书笔记
  • 原文地址:https://www.cnblogs.com/dreagonm/p/10550269.html
Copyright © 2011-2022 走看看