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& ...
随机推荐
- wget 多线程下载 mwget 工具安装
# for centos mini #yum -y install gcc-c++ intltool libssl-dev yum -y install gcc-c++ intltool openss ...
- 【Pr】如何裁剪视频得页面?
[Pr]如何裁剪视频得页面? 选择视频轨道 | 效果 | 裁剪(可以搜索) | 调整上下左右需要裁剪的大小 | 选择缩放,去掉黑边
- python中如果获取对象的内存地址,及字典的地址
在python中,如果查看一个对象的内存地址,可以用到id这个内置函数:使用方式是: id(object)--->返回该对象的10进制的内存地址: 以下是官方定义:翻译为大白话就是,返回一个对象 ...
- 初次使用gitee的笔记
步骤及问题 1.git config --global user.name "username" 2.git config --global user.email "us ...
- STM32F407 HardFault_Handler 中断输出初步定位越界问题
1.测试环境:MDK + STM32F407 2.汇编重写 HardFault_Handler 中断 3.根据输出 nextPoint 地址对照编译生成的 .map 文件 /* 硬件错误中断的回调 ...
- uniapp-时间组件
可以选择年月日时分秒 示例文件 my-datetime.zip 文档:https://ext.dcloud.net.cn/plugin?id=5603
- webrtc windows编译记录
//cmd set path=D:\zzh\depot_tools;%path% set DEPOT_TOOLS_WIN_TOOLCHAIN 0 set vs2022_install=C:\Progr ...
- python学习:窗口程序
https://www.cnblogs.com/zyg123/p/10385456.html # 导入tkinter模块 import tkinter # 创建画布需要的库 from matplotl ...
- BIP设计器代码不生效的问题解决方案
bip高级设计器里的前端代码:0租户问题解决在iuap_yonbuilder_service库里的hpa_extcode表hpa_extcode表里搜索billno字段,对应高级设计器里的单据编码拿到 ...
- gitlab+jenkins配置自动触发构建
1.jenkins安装gitlab插件 2.启动gitlab容器 docker run -itd -v /opt/gitlab/etc:/etc/gitlab -v /opt/gitlab/log:/ ...