我会组合数!

首先发现同一列只有被不同的横块填或被一个相同的竖块填,且用竖块填完1列之后,会分成两个封闭的长方形,而长方形内部则用横块来填充。

先考虑一个子问题,某个 \(2 \times n\) 长方形内只用 \(k\) 个 \(1 \times x\) 的横块填的方案数,显然有 \(\sum\limits^{k-1}_{i=1}{n-1\choose i-1 }{n-1\choose k-i-1}\) ,可以得到 \(2n-2\choose k-2\) ,能够扩展得到一个这样的东西: \(\sum\limits_{i=-a}^{k}{n\choose i+a}{m\choose k-i}={n+m\choose r+s}\) ,用范德蒙德卷积证明。

再考虑将竖块插进来,对于每一个横块组成的大长方形而言,除了第一个前面和最后一个后面可放可不放,其余之间都必须放至少一个竖块,相当于就是将 \(i\) 个横块插入到 \(j\) 个竖块去,即 \(j+1\choose i\) 。然后再是考虑一个个方块怎么分配给 \(i\) 个横块,直接算上 \(n-j-1\choose i-1\) 就行了,相当于是统计对于一个封闭的子长方形要给多大规模的方案数。

然后像之前所讨论过的子问题,对于 \(i\) 个子长方形,不难列出: \(\sum\limits_{\sum^{i}_{g=1}{B_g} = {k-j}}{\prod\limits^{i}_{g=1}{2A_g-2 \choose B_g-2}}\) ,其中 \(A_g\) 表示每个子长方形的列数, \(B_g\) 表示这个子长方形用多少个横块去填,组合意义优化成 \(2n-2j-2i \choose k-j-2i\) 。

把上面的综合一下, \(ans=\sum\limits^{k}_{i=0}\sum\limits_{j=0}^{k-i}{{j+1\choose i}{n-j-1\choose i-1}{2n-2j-2i \choose k-j-2i}}\) , \(i\) 枚举横块, \(j\) 枚举竖块,时间复杂度是 \(O(k^2)\) 。

注意下边界,实际上 \(n=k\) 的时候会寄,因为当 \(i=0\) , \(j=k\) 的时候,循环会返回0答案,所以特判一下+1就行了。

#include<bits/stdc++.h>
#define il inline
#define ll long long
#define maxn 40000001
using namespace std;
const ll mod=998244353;
il int read(){
char c;int f=0,x=0;
while(!isdigit(c=getchar()))f|=(c=='-');
while(isdigit(c))x=(x*10)+(c^48),c=getchar();
return f?-x:x;
}
int n,k;
int fac[maxn];
ll invfac[maxn];
il ll mypow(ll a,ll b){
ll ret=1ll;
while(b){
if(b&1)ret=(ret*a)%mod;
a=(a*a)%mod,b>>=1ll;
}
return ret;
}
il ll C(ll a,ll b){return a<b?0ll:fac[a]*invfac[b]%mod*invfac[a-b]%mod;}
int main(){
n=read(),k=read();
int nn=n*2;fac[0]=invfac[0]=1;
for(int i=1;i<=nn;i++)fac[i]=(fac[i-1]*1ll*i*1ll)%mod;
invfac[nn]=mypow(fac[nn]*1ll,mod-2);
for(int i=nn-1;i>=1;i--)invfac[i]=invfac[i+1]*1ll*(i+1)%mod;
ll ans=0;
for(int i=1;i<=k;i++)
for(int j=0;j<=k-i;j++){
if(k-j-2*i<0)continue;
ans=(ans+C(j+1,i)*C(n-j-1,i-1)%mod*C(2*n-2*j-2*i,k-j-2*i)%mod)%mod;
}
printf("%lld\n",ans+(n==k));
return 0;
}

P8594 「KDOI-02」一个仇的复 题解的更多相关文章

  1. 「杂录」CSP-S 2019 爆炸记&题解

    考试状况 \(Day1\) \(8:30\) 解压,先打个含头文件和\(freopen\)的模板程序,准备做题. \(8:35\) 开题,心想着按顺序做吧,毕竟难度一般是按顺序排的. 第一题,一眼看过 ...

  2. LuoguP7505 「Wdsr-2.5」小小的埴轮兵团 题解

    Content 给出一个范围为 \([-k,k]\) 的数轴,数轴上有 \(n\) 个点,第 \(i\) 个点的位置为 \(a_i\).有 \(m\) 次操作,有且仅有以下三种: 1 x:所有点往右移 ...

  3. 【转】具透 | 你可能不知道,iOS 10 有一个中国「特供」的联网权限功能

    9 月底,苹果正式在北京成立了苹果中国研发中心.近几年,我们也在每年更新的 iOS 系统中不断看到,苹果对中国市场的关照.从早前的九宫格输入法,到最近的骚扰电话拦截,都照顾了国内用户的需求. 在 iO ...

  4. loj #2254. 「SNOI2017」一个简单的询问

    #2254. 「SNOI2017」一个简单的询问 题目描述 给你一个长度为 NNN 的序列 aia_ia​i​​,1≤i≤N1\leq i\leq N1≤i≤N,和 qqq 组询问,每组询问读入 l1 ...

  5. 「SNOI2017」一个简单的询问

    「SNOI2017」一个简单的询问 简单的解法 显然可以差分一下. \[get(l,r,x)\times get(l1,r1,x)=get(1,r,x) \times get(1,r1,x)-get( ...

  6. 硬吃一个P0故障,「在线业务」应该如何调优HBase参数?

    1.背景 由于种种原因,最近将核心业务生产使用的HBase迁移到了云上的弹性MapReduce(EMR)集群上,并使用了EMR的HBase组件默认参数配置. 结果在流量高峰期出现了宿主机故障,挂掉了两 ...

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

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

  8. SpringBoot图文教程17—上手就会 RestTemplate 使用指南「Get Post」「设置请求头」

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1-Spr ...

  9. B 站崩了,总结下「高可用」和「异地多活」

    你好,我是悟空. 一.背景 不用想象一种异常场景了,这就真实发生了:B 站晚上 11 点突然挂了,网站主页直接报 404. 手机 APP 端数据加载不出来. 23:30 分,B 站做了降级页面,将 4 ...

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

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

随机推荐

  1. Geotools实现shape文件的写入

    众所周知Geotools作为开源的Java GIS三方库,已经成为GIS服务器端的主流开源库,其功能非常强大,涉及到GIS业务的方方面面,其中就包括GIS数据的读写,今天小编就借助Geotools来实 ...

  2. [Lua][Love Engine] 打砖块游戏实现过程与知识点

    本文旨在根据LOVE2D官方文档和教程实现打砖块的游戏,记录部分实现过程和重要知识点 目标摧毁所有砖块 玩家控制球拍左右滑动反弹小球 小球摧毁砖块 小球保持在屏幕内 小球碰到屏幕底部,GAME OVE ...

  3. FastJson不成想还有个版本2啊:序列化大字符串报错

    背景 发现陷入了一个怪圈,写文章的话,感觉只有大bug或比较值得写的内容才会写,每次一写就是几千字,争取写得透彻一些,但这样,我也挺费时间,读者也未必有这么多时间看. 我想着,日常遇到的小bug.平时 ...

  4. from my mac

    hello

  5. 【项目源码】基于JavaEE的健康管理系统

    随着网络技术的不断发展,网站的开发与运用变得更加广泛.这次采用java语言SSH框架(Spring,Struts,Hibernate)设计并实现了面向特定群体的健康管理平台.该网站主要有教师饮食管理. ...

  6. 2.7 PE结构:重定位表详细解析

    重定位表(Relocation Table)是Windows PE可执行文件中的一部分,主要记录了与地址相关的信息,它在程序加载和运行时被用来修改程序代码中的地址的值,因为程序在不同的内存地址中加载时 ...

  7. C#结合OpenCVSharp4图片相似度识别

    OpenCVSharp4图片相似度识别 需求背景:需要计算两个图片的相似度,然后将相似的图片进行归纳 1. 图片相似度算法 由于我是CRUD后端仔,对图像处理没什么概念.因此网上调研了几种相似度算法分 ...

  8. 在Vue2和Vue3中JSX的使用集锦

    Vue2安装JSX支持 有时候,我们使用渲染函数(render function)来抽象组件,而渲染函数使用Vue的h函数来编写Dom元素相对template语法差别较大,体验不佳,这个时候就派 JS ...

  9. mysqlbinlog输出sql

    ./mysqlbinlog -v --base64-output=DECODE-ROWS ~/Downloads/tymysql2|grep -A4 'ALTER' >~/Downloads/a ...

  10. Solution Set -「ABC 183」

    本来十分抗拒,但 GM 强制. 「ABC 183A」ReLU Link. 略. #include<cstdio> int main() { long long n; scanf(" ...