我会组合数!

首先发现同一列只有被不同的横块填或被一个相同的竖块填,且用竖块填完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. 【转】具透 | 你可能不知道,iOS 10 有一个中国「特供」的联网权限功能

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  10. 更新日志 - fir.im「高级统计」功能上线

    距离 2016 年到来只剩 10 个日夜,fir.im 也准备了一些新鲜的东西,比如「高级统计」功能和「跳转应用商店」功能,帮助你更好地管理.优化应用,欢迎大家试用反馈:) 新增高级统计功能 这次更新 ...

随机推荐

  1. java引入jep实现四则运算包含负数且规范两位小数

    1.在pom中引入依赖 <!--四则运算--> <dependency> <groupId>jep</groupId> <artifactId&g ...

  2. Solution Set - NOI级别真题选做

    [NOI2007] 社交网络 Link&Submission. key:Floyd Floyd求出任意两点间最短路,以及最短路的条数.求点 \(k\) 的答案时枚举所有点对 \(i,j\),若 ...

  3. elasticsearch 6.2.4和elasticsearch-head环境搭建 使用docker-compose方式

    elasticsearch 6.2.4和elasticsearch-head测试环境搭建 使用docker-compose方式 一 背景说明 对于新手来说搭建一个elasticsearch的测试环境稍 ...

  4. gin-vue-admin开发教程 01安装与启用

    目录 目标 视频教程地址: 环境要求 前端环境安装文档: 安装node npm cnpm yarn(选装) 后端环境安装文档: Golang1.14.2 环境的安装 goland的配置 gin-vue ...

  5. su与sudo用法详解

    su与sudo用法详解 目录 su与sudo用法详解 1. su和sudo详解:切换用户身份 1.1 shell登录类型和环境配置文件 1.2 su进行身份切换 1.3 sudo命令详解 1.3.1 ...

  6. python教程1.1:环境安装+代码编辑器安装

    1.环境安装 打开官⽹ https://www.python.org/downloads/windows/ 下载中 下载后执⾏,点击下⼀步安装就⾏,注意选择添加Python到当前⽤户环境变量 2.代码 ...

  7. 关于浏览器sessionStorage共享问题

    今天也是闲暇之余看了点前端基础知识发现了好玩的 window.open("同源页面")这种方式新开的页面会复制之前的sessionStorage 通过a标签新开的页面同样也会,原理 ...

  8. JDK源码阅读-------自学笔记(十三)(java.text.DateFormat和SimpleDateFormat类)

    时间相关类总图

  9. PageOffice6 版本常用事件

    1.AfterDocumentOpened 事件 打开文件后自动触发的事件是 AfterDocumentOpened 事件,它通常用于实现文件打开后自动执行某些业务逻辑,比如将默认控件全屏.禁止保存. ...

  10. 基于uniapp+vue3自定义增强版table表格组件「兼容H5+小程序+App端」

    vue3+uniapp多端自定义table组件|uniapp加强版综合表格组件 uv3-table:一款基于uniapp+vue3跨端自定义手机端增强版表格组件.支持固定表头/列.边框.斑马纹.单选/ ...