我会组合数!

首先发现同一列只有被不同的横块填或被一个相同的竖块填,且用竖块填完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. 4.k8s-配置网络策略 NetworkPolicy

    一.基本了解 官方文档:https://kubernetes.io/zh-cn/docs/concepts/services-networking/network-policies/基本了解: 1.网 ...

  2. Centos下虚拟环境的创建以及python3安装

    1.python3自己安装 ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3 ln -s /usr/local/python3/bin/p ...

  3. ansible(4)--ansible的command和shell模块

    1. command模块 功能:在远程主机执行 shell 命令:为默认模块,可省略 -m 选项: 注意:不支持管道命令 |: command模块的常用参数如下: 参数 说明 chdir DIR 执行 ...

  4. linux打包压缩工具详解

    linux打包压缩工具详解 目录 linux打包压缩工具详解 1.linux文件压缩工具 1.1 compress命令详解 1.2 gzip命令详解 1.3 bzip2命令详解 1.4 xz命令详解 ...

  5. 记一次ThreadLocal中的用户信息混乱问题

    前言 记录一次开发中遇到的关于 ThreadLocal 问题,场景是数据库表中的操作人总是无缘无故的被更改,排查了几遍代码才发现是 ThreadLocal 没有及时清理导致的. 一.为什么使用 Thr ...

  6. C++:查漏补缺笔记

    文章目录 数组 一维数组 初始化数组 数组名 二维数组 函数 函数声明 函数的分文件 函数重载 指针 空指针 野指针 const 结构体指针 指针++ 指针与函数 地址传递 C++引用 面向对象易错点 ...

  7. 2022年官网下安装Tomcat最全版与官网查阅方法

    目录 一.环境整合 构建工具(参考工具部署方式) 二.官网下载 三.解压安装 四.配置环境 五.启动运行 六.配置为服务 七.查看设置服务 一.环境整合 构建工具(参考工具部署方式) 软件名称 版本 ...

  8. 2022最新的Centos6.10安装mysql8.0

    一.系统源替换 1.备份系统源 (1)进入源的默认路径 cd /etc/yum.repos.d (2)查看一下 (3)备份 cp CentOS-Base.repo CentOS-Base-Back.r ...

  9. java rgb转hsv

    public static double[] toHSV(int r, int g, int b) { Color color = new Color(r, g, b); float[] hsv = ...

  10. Django性能优化:提升加载速度

    title: Django性能优化:提升加载速度 date: 2024/5/20 20:16:28 updated: 2024/5/20 20:16:28 categories: 后端开发 tags: ...