原本自己有一个思路的,推了半天不太确定看了下题解,发现到后面完全不知道他代码在写些什么(我太弱了),所以打算自己理一下。

题解

首先我们可以肯定的一点就是,我们可以发现,一个矩阵的形态只和他横着和竖着有多少行和列被转化了奇数次,而与剩下的都没有关系。

很显然的可以发现行和列是可以独立计算再相乘的,考虑如何计算单行和单列的贡献。

以行为例,我们可以枚举他有多少个奇数的位置,发现奇数位置的数量 \(i\) 必须满足如下的性质:

\[i\le k\\
i\le n\\
i \equiv k \pmod{2}
\]

但是发现可能有一种特殊情况,就是当 \(n-i\) 和 \(m-j\) 也合法的时候,两者形成的矩形是完全一样的,需要把这一部分的消去。

应该就这些了。

代码如下

#include<bits/stdc++.h>
using namespace std;
#define Lint long long
const int N=2e5+5;
const Lint MOD=998244353;
const Lint Inv=499122177;
int n,m,k;Lint res=0;
Lint fac[N],ifac[N];
Lint cnt1[2],cnt2[2];
Lint ksm(Lint x,int k)
{
Lint res=1;
for(;k;k>>=1,x=x*x%MOD)
if(k&1) res=res*x%MOD;
return res;
}
Lint cal(int n,int m){return fac[n]*ifac[m]%MOD*ifac[n-m]%MOD;}
void solve()
{
cin>>n>>m>>k,res=0;
Lint res1=0,res2=0;
for(int i=k%2;i<=n&&i<=k;i+=2) res1+=cal(n,i),res1%=MOD;
for(int i=k%2;i<=m&&i<=k;i+=2) res2+=cal(m,i),res2%=MOD;
res+=res1*res2%MOD;
if(n%2==0&&m%2==0)
{
res1=res2=0;
for(int i=max(n-k,k&1);i<=n&&i<=k;i+=2) res1+=cal(n,i),res1%=MOD;
for(int i=max(m-k,k&1);i<=m&&i<=k;i+=2) res2+=cal(m,i),res2%=MOD;
res-=res1*res2%MOD*Inv%MOD,res=(res+MOD)%MOD;
}
printf("%lld\n",res);
}
int main()
{
fac[0]=ifac[0]=1;
for(int i=1;i<N;++i) fac[i]=fac[i-1]*i%MOD;
for(int i=1;i<N;++i) ifac[i]=ksm(fac[i],MOD-2);
int T;cin>>T;
while(T--) solve();
}

P5857 「SWTR-03」Matrix的更多相关文章

  1. 【题解】#6622. 「THUPC 2019」找树 / findtree(Matrix Tree+FWT)

    [题解]#6622. 「THUPC 2019」找树 / findtree(Matrix Tree+FWT) 之前做这道题不理解,有一点走火入魔了,甚至想要一本近世代数来看,然后通过人类智慧思考后发现, ...

  2. FileUpload控件「批次上传 / 多档案同时上传」的范例--以「流水号」产生「变量名称」

    原文出處  http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/19/multiple_fileupload_asp_net_20130819. ...

  3. 「THUSCH 2017」大魔法师 解题报告

    「THUSCH 2017」大魔法师 狗体面太长,帖链接了 思路,维护一个\(1\times 4\)的答案向量表示\(A,B,C,len\),最后一个表示线段树上区间长度,然后每次的操作都有一个转移矩阵 ...

  4. 【LOJ】#3086. 「GXOI / GZOI2019」逼死强迫症

    LOJ#3086. 「GXOI / GZOI2019」逼死强迫症 这个就是设状态为\(S,j\)表示轮廓线为\(S\),然后用的1×1个数为j 列出矩阵转移 这样会算重两个边相邻的,只要算出斐波那契数 ...

  5. 「 洛谷 」P2768 珍珠项链

    珍珠项链 题目限制 内存限制:125.00MB 时间限制:1.00s 标准输入输出 题目知识点 动态规划 \(dp\) 矩阵 矩阵乘法 矩阵加速 矩阵快速幂 题目来源 「 洛谷 」P2768 珍珠项链 ...

  6. 「 洛谷 」P2151 [SDOI2009]HH去散步

    小兔的话 欢迎大家在评论区留言哦~ HH去散步 题目限制 内存限制:125.00MB 时间限制:1.00s 标准输入 标准输出 题目知识点 动态规划 \(dp\) 矩阵 矩阵乘法 矩阵加速 矩阵快速幂 ...

  7. Note -「动态 DP」学习笔记

    目录 「CF 750E」New Year and Old Subsequence 「洛谷 P4719」「模板」"动态 DP" & 动态树分治 「洛谷 P6021」洪水 「S ...

  8. 「学习笔记」字符串基础:Hash,KMP与Trie

    「学习笔记」字符串基础:Hash,KMP与Trie 点击查看目录 目录 「学习笔记」字符串基础:Hash,KMP与Trie Hash 算法 代码 KMP 算法 前置知识:\(\text{Border} ...

  9. 前端构建工具之gulp(一)「图片压缩」

    前端构建工具之gulp(一)「图片压缩」 已经很久没有写过博客了,现下终于事情少了,开始写博吧 今天网站要做一些优化:图片压缩,资源合并等 以前一直使用百度的FIS工具,但是FIS还没有提供图片压缩的 ...

  10. fir.im Weekly - 如何打造 Github 「爆款」开源项目

    最近 Android 转用 Swift 的传闻甚嚣尘上,Swift 的 Github 主页上已经有了一次 merge>>「Port to Android」,让我们对 Swift 的想象又多 ...

随机推荐

  1. 找回了当年一篇V4L2 linux 摄像头驱动的博客

    从csdn找回 , 无缘无故被封了..当时损失不少啊!!!!!!!!! linux 摄像头驱动 :核心数据结构:    /**     * struct fimc_dev - abstraction ...

  2. 关闭防火墙和设置主机名和ip及克隆机网卡处理方法

    关闭防火墙: service NetworkManager stop --图形化用ifconfig之前先关掉网络服务. chkconfig NetworkManager off (将开机自启动关掉,使 ...

  3. linux定时任务(crontab和at)

    查看定时任务:crontab -l [root@localhost test]# crontab -l no crontab for root 创建编辑定时任务:crontab -e [root@lo ...

  4. linux文本模式和文本替换功能

    linux文本有:正常模式,编辑模式,可视化模式,命令模式. 正常模式进入编辑模式下的快捷键: i  --光标当前位置输入 a --光标位置后输入(append) I --行首输入 A --行尾输入 ...

  5. 基于Opencv识别,矫正二维码(C++)

    参考链接 [ 基于opencv 识别.定位二维码 (c++版) ](https://www.cnblogs.com/yuanchenhui/p/opencv_qr.html) OpenCV4.0.0二 ...

  6. [原题复现][CISCN 2019 初赛]WEB-Love Math(无参数RCE)[未完结]

    简介  原题复现:  考察知识点:无参数命令执行  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 源码审计 代码 1 ...

  7. 巧妙使用MindManager图像功能,能够让你的思维导图更精彩

    MindManager是一款多功能思维导图工具软件,有其他软件无法媲美的项目管理和商业规划高级功能.用户们制作思维导图时一定要注意图文并茂,单纯的文字会过于单调.所以接下来,小编就为大家详细介绍Min ...

  8. bash反弹shell检测

    1.进程 file descriptor 异常检测 检测 file descriptor 是否指向一个socket 以重定向+/dev/tcp Bash反弹Shell攻击方式为例,这类反弹shell的 ...

  9. sentinel--初级使用篇

    1.官方资料 github官网地址:https://github.com/alibaba/Sentinel wiki:https://github.com/alibaba/Sentinel/wiki/ ...

  10. redis 做分布式锁

    ok 我们从最基础的一步步来 加锁: 1.setNx没有expire,拿锁线程挂掉后,死锁 2.setNx然后exipre分两步做,setNx后redis宕机,或者线程挂掉,死锁 3.SETNX re ...