P10681 [COTS 2024] 奇偶矩阵 Tablica

题意

有一个 \(n \times m\) 的 \(01\) 矩阵,问有多少种填 \(01\) 的方式,满足同一行、列恰好有 \(1\) 或 \(2\) 个 \(1\)。

\(n,m \le 3000\)。

思路

首先一个显然的 \(O(nm^2)\) 做法:

设 \(f_{i,s0,s1}\) 表示考虑到第 \(i\) 行,目前有 \(s0\) 列有 \(0\) 个 \(1\),有 \(s1\) 列有 \(1\) 个 \(1\),的方案数。

转移分 \(5\) 种,讨论第 \(i+1\) 行填几个 \(1\),以及在 \(s0\) 还是 \(s1\) 那里选 \(1\)。

就是酱子:

int w = f[i][s0][s1];
if (s0)
_add(f[i + 1][s0 - 1][s1 + 1], mul(s0, w)),
_add(f[i + 1][s0 - 1][s1], mul(w, mul(s0, s1)));
if (s1)
_add(f[i + 1][s0][s1 - 1], mul(s1, w));
if (s0 >= 2)
_add(f[i + 1][s0 - 2][s1 + 2], mul(w, 1ll * s0 * (s0 - 1) / 2 % mod));
if (s1 >= 2)
_add(f[i + 1][s0][s1 - 2], mul(w, 1ll * s1 * (s1 - 1) / 2 % mod));

好像 DP 状态不好再减了。

所以考虑不要一行行转移了,直接组合计数。

学习了 yyyyxh 大佬的题解。

枚举有 \(x_1\) 行恰好有 \(1\) 个 \(1\),那么有 \(x_2 = n-x_1\) 恰好有 \(2\) 个 \(1\)。

那么所有列加起来 \(1\) 的个数 \(y_1+2y_2 = x_1+2x_2\),所以可以直接求出 \(y_1,y_2\)。

问题就是有 \(m\) 种球,其中 \(y_1\) 种各有 \(1\) 个,\(y_2\) 种各有 \(2\) 个。有 \(n\) 个桶,其中 \(x_1\) 个容量为 \(1\),\(x_2\) 个容量为 \(2\)。问有多少种放球方式,满足每个桶都放满,且一个桶里不能放两个同一种球。

桶和球的种类都是有编号的,但是编号不影响计数,所以答案乘上组合数 \(\binom{n}{x_1} \binom{m}{y_1}\) 即可。

一个错误答案是 \((y_1+2y_2)!\)。

有两个难处理的问题:

  1. 两个同种球是无序的,容量为 \(2\) 的桶里面两个球也是无序的。
  2. 一个桶不能放两个同种球。

情况 \(1\) 我们就对答案乘上 \(\frac{1}{2^{x_2+y_2}}\)。

情况 \(2\) 考虑容斥。外层只有枚举的 \(O(\min(n,m))\) 复杂度,所以放心容斥。

具体地,就是随便放 \(-\) 钦定一个容量为 \(2\) 的桶放两个一样的球 \(+\) 钦定两个容量为 \(2\) 的桶放两个一样的球……

钦定的方案数就是除去那几个行和列,剩下随便放的方案数。

\[\sum_{k=0}^{\min(x_2,y_2)} \binom{x_2}{k} \binom{y_2}{k} k! (-1)^k \frac{(y_1+2y_2-2k)!}{2^{x_2+y_2-2k}}
\]

\(k!\) 是计算每个钦定的桶对应什么种类的球。

这对吗?实际上是错的,如果有两个同种球被放在一个桶里的情况,直接算排列只是多算了 \(1\) 次,而你以为有 \(3\) 次都是多算的。所以当你钦定这两个同种球必须在一个桶里的时候,需要把多减的加回来。就是说容斥要带系数 \(2^k\),体现在分母那里变成 \(2^{x_2+y_2-k}\)。

总的式子就是:

\[\sum_{x_1+x_2=n, y_1+y_2=m, x_1+2x_2=y_1+2y_2} \binom{n}{x_1} \binom{m}{y_1} \sum_{k=0}^{\min(x_2,y_2)} \binom{x_2}{k} \binom{y_2}{k} k! (-1)^k \frac{(y_1+2y_2-2k)!}{2^{x_2+y_2-k}}
\]

\(\binom{x_2}{k} \binom{y_2}{k} k! (-1)^k \frac{(y_1+2y_2-2k)!}{2^{x_2+y_2-k}}\) 算出来是小数,很反直觉。大概是容斥容的。

复杂度 \(O(\min(n,m)^2)\)。

code

好难。

#include<bits/stdc++.h>
#define sf scanf
#define pf printf
#define rep(x,y,z) for(int x=y;x<=z;x++)
#define per(x,y,z) for(int x=y;x>=z;x--)
using namespace std;
typedef long long ll;
namespace hesitate {
constexpr int N=6e3+7,Max=6e3,mod=1e9+7;
int add(int a,int b) { return a+b>=mod ? a+b-mod : a+b; }
void _add(int &a,int b) { a=add(a,b); }
int mul(int a,int b) { return 1ll*a*b%mod; }
void _mul(int &a,int b) { a=mul(a,b); }
int ksm(int a,int b=mod-2) {
int s=1;
while(b) {
if(b&1) _mul(s,a);
_mul(a,a);
b>>=1;
}
return s;
}
int fac[N],ifac[N],mi[N],imi[N];
void init() {
fac[0]=mi[0]=1;
rep(i,1,Max) fac[i]=mul(fac[i-1],i);
rep(i,1,Max) mi[i]=add(mi[i-1],mi[i-1]);
ifac[Max]=ksm(fac[Max]);
per(i,Max-1,0) ifac[i]=mul(ifac[i+1],i+1);
imi[Max]=ksm(mi[Max]);
per(i,(Max)-1,0) imi[i]=add(imi[i+1],imi[i+1]);
}
int c(int n,int m) { return mul(fac[n],mul(ifac[m],ifac[n-m])); }
int n,m;
int ans;
void main() {
init();
sf("%d%d",&n,&m);
rep(x1,0,n) {
int x2=n-x1,y2=x1+(x2<<1)-m,y1=m-y2;
if(y2<0 || y1<0) continue;
int s=0;
rep(k,0,min(x2,y2)) {
int sum= (k&1) ? mod-1 : 1;
_mul(sum,mul(mul(c(x2,k),c(y2,k)),fac[k]));
_mul(sum,mul(fac[y1+(y2<<1)-(k<<1)],imi[x2+y2-k]));
_add(s,sum);
}
_mul(s,mul(c(n,x1),c(m,y1)));
_add(ans,s);
}
pf("%d\n",ans);
}
}
int main() {
#ifdef LOCAL
freopen("in.txt","r",stdin);
freopen("my.out","w",stdout);
#endif
hesitate :: main();
}

P10681 [COTS 2024] 奇偶矩阵 Tablica的更多相关文章

  1. HDOJ-1010 Tempter of the Bone(dfs+剪枝)

    http://acm.hdu.edu.cn/showproblem.php?pid=1010 给出一个n*m的迷宫 X为墙 .为空地 S为起点 D为终点 给出时间T 每走一步花费一单位的时间 走过的空 ...

  2. 网络流专题练习Day2

    04/17  目前做了:题 由于目前六道都是1A感觉非常爽... BZOJ1412: [ZJOI2009]狼和羊的故事 “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向 ...

  3. HDU 1010 Tempter of the Bone(DFS+奇偶剪枝)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010 题目大意: 输入 n m t,生成 n*m 矩阵,矩阵元素由 ‘.’ 'S' 'D' 'X' 四 ...

  4. hdu.1043.Eight (打表 || 双广 + 奇偶逆序)

    Eight Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  5. Dynamic Morphing Square(动态变形矩阵)

    题目描述: 解题思路: 先对输入的N进行判断,是否不小于3,如果小于3,需要继续输入一个新的数,知道输入的N比3大. 第一个打印的矩阵,*号为最外面一圈,其余全为-. 第二个打印的矩阵,*号向内缩减了 ...

  6. hdu 1010:Tempter of the Bone(DFS + 奇偶剪枝)

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  7. [Lonlife1031]Bob and Alice are eating food(递推,矩阵快速幂)

    题目链接:http://www.ifrog.cc/acm/problem/1031 题意:6个水果中挑出n个,使得其中2个水果个数必须是偶数,问有多少种选择方法. 设中0代表偶数,1代表奇数.分别代表 ...

  8. bzoj 1002 [FJOI2007]轮状病毒 高精度&&找规律&&基尔霍夫矩阵

    1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2234  Solved: 1227[Submit][Statu ...

  9. hdoj 1010 Tempter of the Bone【dfs查找能否在规定步数时从起点到达终点】【奇偶剪枝】

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  10. [POJ 3734] Blocks (矩阵高速幂、组合数学)

    Blocks Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3997   Accepted: 1775 Descriptio ...

随机推荐

  1. java 各个文件夹的含义

    简介 java 后端项目常常会使用 类似dao, service, 之类的文件夹, 这些文件夹之间是如何协作的呢?? SpringMVC的层: DAO, Service, Controller, Vi ...

  2. 在服务器上安装 gitlab

    简介 RT 核心参考链接 https://about.gitlab.com/install/#ubuntu?version=ce https://www.cnblogs.com/zhujingzhi/ ...

  3. POLIR-Laws-Constitution消费者权益保护法: 全文@国家市场监督管理总局 《中华人民共和国消费者权益保护法》

    POLIR-Laws-Constitution消费者权益保护法: 全文@国家市场监督管理总局 <中华人民共和国消费者权益保护法> 中华人民共和国消费者权益保护法 发布时间:2020-07- ...

  4. SciTech-Mathmatics-Probability+Statistics: 开放政府License:统计数据源:英国🇬🇧官方统计公布: UK's Official statistics announcement core statistics book

    https://www.gov.uk/government/statistics/announcements/trade-and-investment-core-statistics-book--91 ...

  5. babylon.js 学习笔记(7)

    前面我们学习了如何画一堆房子(如下图),显然这单调的绿色大地,看上去效果并不好. babylon.js中,可以用图片模拟出地势高低不同的效果,比如下面这张图片: 颜色越深的地方,表示地势越低(即:盆地 ...

  6. 大白话:什么场景适合做 AI Agent 应用?

    学习贴,错了大家评论交流,我继续学习改正 大家可以看到,软件这块从普通应用到 AI 应用,然后现在都在说 AI Agent 应用.我感觉我自己心里定义都不是很清楚. 下面从用户角度大白话分享下 一.普 ...

  7. D - Permutation Counting

    http://acm.hdu.edu.cn/showproblem.php?pid=6880 根据长度为n的排列a,构造长度n-1的序列b 思路:DP 官方题解: 代码: #include<io ...

  8. 分析西门子Smart ECX 与MyEMS对比

    西门子Smart ECX智慧能碳管理平台与MyEMS开源能源管理平台在多个维度上存在显著的差异.以下是对两者进行的客观对比: 一.技术架构与功能 西门子Smart ECX: 技术基础:基于物联网.云计 ...

  9. linux同步网络时间和时区设置

    一.时区设置 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 二.时间同步(同步网络时间) ntpdate ntp1.aliyun.com或者n ...

  10. 伙伴匹配系统(移动端 H5 网站(APP 风格)基于Spring Boot 后端 + Vue3 - 03

    伙伴匹配系统(移动端 H5 网站(APP 风格)基于Spring Boot 后端 + Vue3 - 03 项目地址: Github:https://github.com/China-Rainbow-s ...