P4921 [MtOI2018]情侣?给我烧了!
前言
情人节写的这道题,题目名称好符合我当时的心情。
题目链接
解法
容斥
我们发现最后要求的结果是恰好 \(k\) 对情侣坐在一起的方案数,我们就不难想到去计算恰好 \(n-k\) 对没坐在一起的方案数。那么我们很自然的得到最后答案: \(ans = C_n^k \times A_n^k \times 2^k \times g_{n-k}\),\(g_k\) 为恰好 \(k\) 对情侣没坐在一起的方案数,然后就可以快乐的容斥了:
\]
这玩意预处理一下也就是 \(O(n^2)\) 的复杂度,总复杂度也就是 \(O(Tn + N^2)\)。
反演
我们发现题目中有恰好 二字,这不就在暗示我们可以用二项式反演吗。我们直接令 \(F_i\) 为至少 \(i\) 对情侣坐一起的方案数,\(G_i\) 为恰好 \(i\) 对情侣坐一起的方案数,由二项式反演可知:
\]
我们现在只需要求出 \(F_i\) 即可。
显而易见,\(F_k = C_n^k \times A_n^k \times 2^k \times (2\times n - 2\times k)!\),我们将它代入到上面的式子得:
G_k &= \sum_{i=k}^n (-1)^{i-k} \times 2^i \times C_i^k \times C_n^i \times A_n^i \times (2\times n - 2 \times i)! \\&
= \sum_{i=0}^{n-k} (-1)^i \times 2^{i+k} \times C_{i+k}^k \times C_n^{i+k} \times A_n^{i+k} \times (2\times n - 2 \times k - 2\times i)! \\&
= \frac{2^k \times n! \times n!}{k!} \sum_{i=0}^{n-k} \frac{(-1)^i \times 2^i \times (2\times n- 2\times k-2\times i)!}{i! \times (n - k - i)! \times (n - k - i)!}
\end{aligned}\]
我们也只需要进行预处理就可以了,最后复杂度和上边是一样的。
Code
#include<bits/stdc++.h>
#define int long long
const int M = 2e3 + 7 , mod = 998244353;
int fac[M] , inv[M] , f[M] , pow2[M];
inline int Pow(int a , int b) {
int ans = 1; for(;b; b >>= 1 , a= a * a % mod) if(b & 1) ans = ans * a % mod;
return ans;
}
inline int C(int n , int m) {
if(n < 0 || m < 0 || n < m) return 0;
return fac[n] * inv[m] % mod * inv[n - m] % mod;
}
inline int A(int n , int m) {
if(n < 0 || m < 0 || n < m) return 0;
return fac[n] * inv[n - m] % mod;
}
signed main () {
int t; std::cin >> t;
pow2[0] = 1, inv[0] = fac[0] = 1; for(int i = 1; i <= 2e3; ++ i) fac[i] = fac[i - 1] * i % mod , inv[i] = Pow(fac[i] , mod - 2) , pow2[i] = pow2[i - 1] * 2 % mod;
for(int i = 0; i <= 1e3; ++ i)
for(int j = 0; j <= i; ++ j) (f[i] += ((j & 1) ? mod - 1 : 1) * inv[j] % mod * pow2[j] % mod * fac[i - j << 1] % mod * inv[i - j] % mod * inv[i - j] % mod) %= mod;
while(t --) {
int n; std::cin >> n;
for(int i = 0; i <= n; ++ i) std::cout << (fac[n] * fac[n] % mod * pow2[i] % mod * inv[i] % mod * f[n - i] % mod) << '\n';
}
}
P4921 [MtOI2018]情侣?给我烧了!的更多相关文章
- P4921 【情侣?给我烧了!】
加强前这道题还是比较友好的 首先我们设\(g_x\)为x对情侣没有一对坐在一起的数量 然后答案就可以表示成:\(C_n^k*A_n^k*2^k*g_{n-k}\) 这里的复杂度是\(O(T*N)\), ...
- 洛谷 P4931 - [MtOI2018]情侣?给我烧了!(加强版)(组合数学)
洛谷题面传送门 A 了这道题+发这篇题解,就当过了这个七夕节吧 奇怪的过节方式又增加了 首先看到此题第一眼我们可以想到二项式反演,不过这个 \(T\) 组数据加上 \(5\times 10^6\) 的 ...
- 洛谷P4931 情侣!给我!烧了! 数论
正解:数论 解题报告: 传送门 这题,想不到就很痛苦,但是理解了之后还是觉得也没有很难,,,毕竟实现不难QAQ 首先关于前面k对情侣的很简单,就是C(n,k)*C(n,k)*A(k,k)*2k 随便解 ...
- 洛谷 P2194 HXY烧情侣【Tarjan缩点】 分析+题解代码
洛谷 P2194 HXY烧情侣[Tarjan缩点] 分析+题解代码 题目描述: 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里 ...
- 洛谷P2194 HXY烧情侣
题目描述 众所周知,\(HXY\)已经加入了\(FFF\)团.现在她要开始喜\((sang)\)闻\((xin)\)乐\((bing)\)见\((kuang)\)地烧情侣了.这里有\(n\)座电影院, ...
- HXY烧情侣(洛谷 2194)
题目描述 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里有n座电影院,n对情侣分别在每座电影院里,然后电影院里都有汽油,但是要 ...
- HXY烧情侣
题目描述 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里有n座电影院,n对情侣分别在每座电影院里,然后电影院里都有汽油,但是要 ...
- P2194 HXY烧情侣【Tarjan】
前言 当时和\(GYZ\)大佬一起做这个题,他表示这个题对他很不友好(手动滑稽) 题目描述 众所周知,\(HXY\) 已经加入了 \(FFF\) 团.现在她要开始喜(sang)闻(xin)乐(bing ...
- [P4921] 情侣?给我烧了!
回顾一下错排公式 错排问题: 设n位错排数为D[n].考虑元素1的位置,设置为k(有n-1中 ):在考虑元素k的位置, 若为1,则转换为n-2位的错排:否则,视元素k为元素1(不能放在位置1),转换为 ...
- 【Luogu4931】情侣?给我烧了! 加强版(组合计数)
[Luogu4931]情侣?给我烧了! 加强版(组合计数) 题面 洛谷 题解 戳这里 忽然发现我自己推的方法是做这题的,也许后面写的那个才是做原题的QwQ. #include<iostream& ...
随机推荐
- kubeadm安装
目录: 环境准备 所有节点安装docker 部署K8s集群 部署Dashboard 安装Harbor私有仓库 安装 master(2C/4G,cpu核心数要求大于2) 192.168.63.100 d ...
- uml类图中的+,-,#符号的含义
描述类的属性的可见性: UML中,可见性分为4级 1.public 公用的 :用+ 前缀表示 ,该属性对所有类可见 2.protected 受保护的:用 # 前缀表示,对该类的子孙可见 3.priva ...
- eclipse设置UTF-8(字符编码集)所有方式
一.全部方式 1.修改workspace编码 windows->preferences->gengral->workspace 选择other->UTF-8. 2.修改Con ...
- debian11 bspwm+polybar问题记录(siji字体无法正常显示)
一.siji字体无法显示. 很懒很菜,就想用开箱即用的原始配置依然遇到了问题...plybar中的bitmap字体siji无法正常显示.即便按照github的siji官方脚本安装了siji字体还是不行 ...
- Docker学习笔记-02 常用命令
1.启动类: 启动docker: systemctl start docker 停止docker: systemctl stop docker 重启docker: systemctl restart ...
- RSTP-快速生成树协议
1 STP的不足之处STP协议虽然能够解决环路问题,但是由于网络拓扑收敛慢,影响了用户通信质量. 2 RSTP概述RSTP在许多方面对STP进行了优化,它的收敛速度更快,而且能够兼容STP. 通过接口 ...
- docker 可视化平台Portainer搭建
1.部署步骤 docker pull portainer/portainer docker run -d -p 9001:9000 \--restart=always \-v /var/run/doc ...
- Centos7 更换yum软件源
https://blog.csdn.net/zhinian1204/article/details/123975403
- DevExpress各大版本支持的VS版本和支持的.net版本图
如下图所示,绿色Yes代表支持,红色No代表不支持.对于有些人觉得装了dev后,vs工具箱没有,一般都是以下两大问题:1.要么你的Dev的版本不支持你当前的VS版本,没有很正常.2.要么你的项目的.n ...
- vulnhub:Its_October靶机
kali:192.168.111.111 靶机:192.168.111.175 信息收集 端口扫描 nmap -A -v -sV -T5 -p- --script=http-enum 192.168. ...