【洛谷题解】P5159 WD与矩阵

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

传送门

如何用一句话描述:

给定n和m,求有多少种大小为n*m的01矩阵满足每行每列异或值都是0,答案对998244353取模


yy一下

我们考虑一个(n-1)*(m-1)的矩阵

很显然,如果我们随便填,会发生什么呢?

会有一个超级大的答案出来

可是这跟我们的问题有什么关系?

毫无关系

我们找个特例,比如n=4,m=4

我们可能构造出来一个矩阵是这样的:

1 0 1 ?
0 1 1 ?
0 0 0 ?
? ? ? ?

问题来了,?处填什么?

填之前的坑啊!

用这个栗子来说

最终我们胡搞搞出来得到的是:

1 0 1 0
0 1 1 0
0 0 0 0
1 1 0 0

发现了什么?

什么都没有发现

这个矩阵满足要求

在关注原来的“?”处

发现:

对于每一行最后一个,如果当前行1的个数为偶数,那么它为0,不然就是1
对于每一列最后一个,如果当前行1的个数为偶数,那么它为0,不然就是1

复制粘贴真好玩

不管怎么样,这样子是可以的,是能得到正解的

那么,对于处于右下角的呢?

可以证明,当那几个格子确定下来时,右下角的格子不会出现矛盾情况

但是我不会

于是,这就是一个简单的快速幂了

上代码!当当当当——

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

long long t;
long long n,m;

inline void read(long long &x)
{
    long long f=1;
    x=0;
    char ch=getchar();
    while(ch<'0'||ch>'9')
    {
        if(ch=='-')
        {
            f=-1;
        }
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
    {
        x=(x<<3)+(x<<1)+ch-'0';
        ch=getchar();
    }
    x*=f;
}

long long fast_pow(long long a,long long b,long long n)
{
    long long t,y;
    t=1;
    y=a;
    while(b!=0)
    {
        if(b&1==1)
        {
            t=t*y%n;
        }
        y=y*y%n;
        b=b>>1;
    }
    return t;
}

int main()
{
    scanf("%lld",&t);
    while(t--)
    {
        scanf("%lld%lld",&n,&m);
        long long ans;
        ans=fast_pow(2,(n-1)*(m-1),998244353);
        printf("%lld\n",ans);
    }
    return 0;
}
B3995 [洛谷 202406GESP 模拟 二级] 小洛的田字矩阵 题解 阅读详情

相关推荐

NOI2018全国第一试.pdf

NOI 2018全国信息学奥林匹克竞赛开赛第一天试题

[洛谷 202406GESP 模拟 二级] 选择题、判断题|题目及答案

[洛谷 202406GESP 模拟 二级] 选择题、判断题|题目及答案

yaosichengalpha的博客 1703

模拟和高精度简单总结(依靠洛谷题单)

这里的总结是对于之前写的博客中的题目,一些不熟练和新遇到,新学习的内容进行总结记录。python自带高精度,对于高精度的题目不必像c++那样运用字符模拟进行计算。模拟的题目应该就是带着一个繁琐的标签,在做题的时候应该把所有的需要条件梳理清楚。严格按照题目的描述进行做题。模拟的题目就是按照题目的描述一步一步的把步骤转换成代码。而高精度虽然py接受很大的数。但是也会有超出范围的时候。这需要引入sys库,使用sys.set_int_max_str_digits()函数进行扩展,py的默认的长度为4300.

KLSZM的博客 1213

问题 C: 油田问题

题目描述 输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块。如果两个字符“@”所在的格子相邻(横、竖或者对角线方向),即属于同一个八连块。 输入 多组输入 输入行数m,以及列数n。 然后输入*和@ 1<=n,m<=100 输出 联通块个数 5 5 ****@ *@@*@ *@**@ @@@*@ @@**@ 就是将a数组进行操作,把整个矩阵都遍历一遍,在每次进行计算时都从是@开始进行,然后每次进行时,就是一个块,当然,每次需要进行时,需要判断是否进行被纳入其他块了,这就需要a数组进行

唐傘皮 1148

洛谷P5159 WD矩阵

题目背景 WD整日沉浸在矩阵中,无法自拔…… 题目描述 WD特别喜欢矩阵,尤其是\(01\)矩阵。 一天,CX给了WD一个巨大的\(n\)行\(m\)列的\(01\)矩阵WD发现这个矩阵每行、每列的异或值都是\(0\). CX随后就问道:“WD,你知道有多少\(01\)矩阵每行每列异或值都是\(0\)吗!?”WD当然不会这个问题,于是他来请教你。 由于答案可能很大,输出结果模\(99824435...

weixin_30668887的博客 155

C++学习笔记--二阶构造模式

如何判断构造函数的执行结果?在构造函数中执行return语句会发生什么?构造函数执行结束是否意味着对象构造成功? 在一般的构造函数中我们确实无法判断构造函数的执行结果,当我们在函数里添加bool标志虽然可以通过检测返回值但是终究不是一个好方法;在构造函数里如果添加了return语句的话,当执行到return语句时就会立即返回,如果是在初始化完成前返回的话就会产生一个半成品对象,这样的结果肯定不是

一念之间、 550

二维数组(26道)

【代码】二维数组(**道)

2301_77759752的博客 1560

PTA 斐波那契数列 求模

已知斐波那契数列 F​n​​=F​n−1​​+F​n−2​​(n>=3),F​1​​=1,F​2​​=1 求解该数列的第n项,结果对998244353取模。 输入格式: 输入一个正整数n (1<=n<=10000000)。 输出格式: 输出一个数,数列的第n项 我的原答案如下,最后一个测试点过不了: #include <iostream> using namespace std; int main() { int n; cin>>n; int F(int );

阿菠萝叻的博客 2977

【noi.ac #1765】 T2

题目 题目描述 读入一个字符串 SS, 问该字符串有多少对子串 u,vu,v, uu 和 vv 都是回文串且出现位置相交. 答案对 998244353 取模. 输入格式 输入只有一行, 包括一个字符串 SS, 仅包含小写字符. 输出格式 输出只有一个整数, 表示答案对 998244353 取模后的值. 样例 1 输入 babb 输出 6 说明 在样例中, 回文子串有 S[1,1],S[2,2],S...

Brute♂force 625

2022“杭电杯”中国大学生算法设计超级联赛(9)签到题4题

2022“杭电杯”中国大学生算法设计超级联赛(9)2022“杭电杯”中国大学生算法设计超级联赛(9)2022“杭电杯”中国大学生算法设计超级联赛(9)2022“杭电杯”中国大学生算法设计超级联赛(9)...

小哈里的博客 1611

2021级新生个人训练赛第36场

问题 A: 礼物 题目描述 在一个n×n的网格图上,放置着m个礼物,每个礼物有一个价值vi(1≤i≤m),你可以选择一个礼物,然后选择: (1)取走它同列的所有礼物,或者(2)取走它同行的所有礼物 请问所能获取的礼物的最大价值之和是多少? 输入 第一行两个正整数n,m。 之后m行,每行三个整数xi,yi,vi,表示第i个礼物在第xi行,第yi列的格子上(不同礼物可能会在同一个格子),其价值为vi。 输出 一个整数,表示能获取的最大的礼物价值之和。 样例输入 Copy 6 7 1 3 1 2 2 2 2

qq_52273733的博客 4435

NOIP2022广东省选day1题解

NOIP2022广东省选day1题解

Viraha_233的博客 1751

洛谷 P5159 WD矩阵【思维】

233题目:题意:分析:代码: 题目: 传送门 题意: 问一个n∗mn*mn∗m的010101矩阵中,求有多少种方案能使每行每列的数字异或和等于000 分析: 我们假设是采用最优的策略去布置矩阵,那么有一件非常明显的事情:每一行的最后一位,都会替前面的异或和擦屁股,并使得tatata等于000;每一列的最后一位,都会替上面的异或和擦屁股,并使得tatata也等于000 如此推理,我们就将问题...

qq_35786326的博客 227

2020.2.5 C组模拟题解

目录 T1:最大值 T2:火柴 T3:游戏 T4:hack的比赛 又是一届异常快乐的%你赛…… 回归正题…T1:最大值 题目描述 给定n个数,{x1,x2,…,xn}要求从中选出至少一个数,至多n个数,使得乘积之和最大。 输入 第一行整数n,表示有多少个数 接下来n行,每行一个整数xi,-10 ≤xi≤ 10 输出 输出一行,表示最大乘积 ...

775

题解 矩阵 matrix

矩阵 matrix Description 给出一个 n × m 的矩阵。请在其中选择至多 3 个互不相交的,大小恰为 k × k 的子矩阵,使得子矩阵的 权值和最大。 Input 第一行三个整数 n, m, k ( n, m ≤ 1500) 。 接下来 m 行,每行 n 个整数,描述矩阵矩阵中的每个元素值都为非负整数,且不超过 500 。 Output 输出一行一个整数,描述答案。 Sampl...

weixin_30822451的博客 465

数论 常用知识点复习(预习

分数取模 利用费马小定理a^(p-1)≡1(mod p) 则 ab-n ≡ ab(p-n-1) mod p b(p-n-1)用快速幂取模得出 例如CF1452D 最后答案是f(n)/2n 对998244353取模 ans = f[n]*qpow(2,mod-n-1,mod)%mod; 完整代码 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int mod = 998244353 ; con

whtfffffff的博客 240

P5159 WD矩阵

思路 奇怪的结论题 考虑增量构造,题目要求每行每列都有偶数个1,奇偶性只需要增减1就能够调整了,所以最后一列一行一定能调整前面n-1阶矩阵的值,所以前面可以任选 答案是\(2^{(n-1)(m-1)}\) 当时怎么也考虑不清楚最后一行和最后一列交点的值,但是莽了一发发现对了。。 看了shadowice1984的题解之后才学会了证明 假设每行填的都是一个二进制数,最后一行填的必然是前面的异或和 因...

weixin_33719619的博客 108

洛谷:题解 P1743 【矩阵 III】

其实这道题有一种比递推更巧妙的算法,就是排列组合(其实我是小学生)。用排列组合来写的话答案应是C(n+m,n)。但为什么结果就是C(n+m,n)呢,因为从左上角必须要走n+m步才能到达右下角。而且还必须要有n步是往下走的,往下走的n步是可以任何时候走的。因此,方法数就是在n+m的步数中,挑n步的方法数(不允许重复)。也就是C(n+m,n)。最后献上华丽丽的代码。var n,m,i:longint...

lulinrui666的博客 425
上一篇: HDU2012——素数判定
tt66ea
博客等级 码龄8年 1粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值