洛谷 P4931 - [MtOI2018]情侣?给我烧了!(加强版)(组合数学)
A 了这道题+发这篇题解,就当过了这个七夕节吧
奇怪的过节方式又增加了
首先看到此题第一眼我们可以想到二项式反演,不过这个 \(T\) 组数据加上 \(5\times 10^6\) 的数据范围肯定是反演不动的,因此考虑怎样不反演。
我们很显然可以将求解这个问题划分成两部分:选出 \(k\) 对相邻的情侣并将它们的位置安排好+排列好剩下 \(n-k\) 对情侣。两部分显然是独立的,因此分别考虑。第一部分是是比较容易的,选出 \(k\) 对情侣方案数 \(\dbinom{n}{k}\),选出 \(k\) 排位置方案数 \(\dbinom{n}{k}\),将这 \(k\) 对与 \(k\) 排座位对应方案数 \(k!\),将 \(k\) 对情侣随意调换位置 \(2^k\),因此第一部分方案数就是 \(\dbinom{n}{k}^2k!2^k\)。第二部分显然可以等效于求安排好 \(n-k\) 对情侣的方案数,假设这东西为 \(f_{n-k}\),显然这东西是要预处理的,考虑怎么预处理 \(f_n\)。注意到这东西跟错排数长得很像但又不完全一致,因此考虑错排数的套路,我们枚举第一排是哪两个人坐在一起的,那么方案数为 \(2n·(2n-2)\),第二个地方要减 \(2\) 因为一个人不能和自己的情侣坐在一起,那么考虑这两个人的 boy/girlfriend 是否坐在一起,如果它们坐在一起那不错,这两对 couple 就消失了,剩余部分就是 \(f_{n-2}\),不过安排好第一排这两个人的 boy/girlfriend 还需乘上个 \(2(n-1)\),因为要选择一排给他们坐,他们的位置还可以交换,因此需乘个 \(2\)。如果它们不坐一起,那么我们就把这东西当作一个限制条件,强制令它们贴贴,形成一对新的 couple,这样问题就规约为 \(f_{n-1}\),因此我们得到了递推式 \(f_n=2n·(2n-2)(f_{n-1}+2(n-1)f_{n-2})\),线性求一下即可。
时间复杂度 \(\mathcal O(n+T)\)
祝大家七夕节快乐
const int MAXN=5e6;
const int MOD=998244353;
int fac[MAXN+5],ifac[MAXN+5],pw2[MAXN+5],f[MAXN+5];
void init_fac(int n){
for(int i=(fac[0]=ifac[0]=ifac[1]=pw2[0]=1)+1;i<=n;i++) ifac[i]=1ll*ifac[MOD%i]*(MOD-MOD/i)%MOD;
for(int i=1;i<=n;i++) ifac[i]=1ll*ifac[i]*ifac[i-1]%MOD,fac[i]=1ll*fac[i-1]*i%MOD,pw2[i]=(pw2[i-1]<<1)%MOD;
f[0]=1;for(int i=2;i<=n;i++) f[i]=4ll*i*(i-1)%MOD*(f[i-1]+2ll*(i-1)*f[i-2]%MOD)%MOD;
}
int binom(int x,int y){
if(x<0||y<0||x<y) return 0;
return 1ll*fac[x]*ifac[y]%MOD*ifac[x-y]%MOD;
}
int main(){
init_fac(MAXN);int qu;scanf("%d",&qu);
while(qu--){
int n,k;scanf("%d%d",&n,&k);
printf("%d\n",1ll*binom(n,k)*binom(n,k)%MOD*pw2[k]%MOD*fac[k]%MOD*f[n-k]%MOD);
}
return 0;
}
洛谷 P4931 - [MtOI2018]情侣?给我烧了!(加强版)(组合数学)的更多相关文章
- 【洛谷P4931】 情侣?给我烧了!(加强版)组合计数
挺有意思的一道题... code: #include <bits/stdc++.h> using namespace std; #define N 5000006 #define mod ...
- 洛谷P3796 【模板】AC自动机(加强版)(AC自动机)
洛谷题目传送门 先膜一发yyb巨佬 orz 想学ac自动机的话,推荐一下yyb巨佬的博客,本蒟蒻也是从那里开始学的. 思路分析 裸的AC自动机,这里就不讲了.主要是这题太卡时了,尽管时限放的很大了.. ...
- 洛谷P2812校园网络【Network of Schools加强版】
题目背景 浙江省的几所\(OI\)强校的神犇发明了一种人工智能,可以\(AC\)任何题目,所以他们决定建立一个网络来共享这个软件.但是由于他们脑力劳动过多导致全身无力身体被\(♂\)掏\(♂\)空,他 ...
- 洛谷P4931 情侣!给我!烧了! 数论
正解:数论 解题报告: 传送门 这题,想不到就很痛苦,但是理解了之后还是觉得也没有很难,,,毕竟实现不难QAQ 首先关于前面k对情侣的很简单,就是C(n,k)*C(n,k)*A(k,k)*2k 随便解 ...
- 洛谷P4931 情侣?给我烧了!(加强版)(组合数学)
题面 传送门 题解 首先我们算出刚好有\(k\)对情侣的方案数 从\(n\)对情侣中选出\(k\)对,方案数为\({n\choose k}\) 从\(n\)排座位中选出\(k\)排,方案数为\({n\ ...
- 题解-洛谷4921&4931 情侣?给我烧了!(加不加强无所谓版)
Problem 简单版 & 加强版 题目概要(其实题面写得很清楚,这里搬运一下): \(n\) 对情侣排座位,恰有 \(n\) 排座位,每排 \(2\) 个座位,在一个就座方案中所有人会将将座 ...
- 洛谷P3796 - 【模板】AC自动机(加强版)
原题链接 Description 模板题啦~ Code //[模板]AC自动机(加强版) #include <cstdio> #include <cstring> int co ...
- cjoj P1435 - 【模板题 USACO】AC自动机 && 洛谷 P3796 【模板】AC自动机(加强版)
又打了一遍AC自动稽. 海星. 好像是第一次打trie图,很久以前就听闻这个思想了.OrzYYB~ // It is made by XZZ #include<cstdio> #inclu ...
- 【洛谷】NOIP提高组模拟赛Day1【组合数学】【贪心+背包】【网络流判断是否满流以及流量方案】
U41568 Agent1 题目背景 2018年11月17日,中国香港将会迎来一场XM大战,是世界各地的ENLIGHTENED与RESISTANCE开战的地点,某地 的ENLIGHTENED总部也想派 ...
随机推荐
- 工厂模式--摆脱你日复一日new对象却依旧单身的苦恼!
前言 每每谈及到Java,就不免会想到一个悲伤的事实:你是否每天都在new对象,却依然坚守在单身岗上屹立不倒.(所谓面向对象编程hhh),这篇来学一下工厂模式,摆脱new对象的苦恼! 知识点 传统工厂 ...
- 重学c#系列——list(十二)
前言 简单介绍一下list. 正文 这里以list为介绍. private static readonly T[] s_emptyArray = new T[0]; public List() { t ...
- WEB安全指南
说明:本文是Mozilla Web应用部署文档,对运维或者后端开发团队的部署行为进行指导.该部署安全规范内容充实,对于部署有很大意义.同时也涉及到了许多web前端应用安全的基本知识,如CSP, TOK ...
- 安装多个版本的MySQL
安装多个版本的MySQL 之前在PC机上安装了 MySQL 5.5 后续发现了窗口函数,而窗口函数是 MySQL8 以后才支持的,故在本地又安装了一个 MySQL 8 安装MySQL 5.5 进入my ...
- 【二食堂】Beta - 事后分析
事后分析 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? Beta阶段我们首先要对文本标注方式进行优化,其次时添加好友系统,实现邀请好友共同标注的功能. ...
- 【技术博客】利用handler实现线程之间的消息传递
[技术博客]利用handler实现线程之间的消息传递 一.handler简介 在Android Studio的开发中,经常需要启动多个线程.比如向远程发送请求时,必须新开一个子线程,否则会造成程序崩溃 ...
- 确定字符互异 牛客网 程序员面试金典 C++ Python
确定字符互异 牛客网 程序员面试金典 C++ Python 题目描述 请实现一个算法,确定一个字符串的所有字符是否全都不同.这里我们要求不允许使用额外的存储结构. 给定一个string iniStri ...
- CANN5.0黑科技解密 | 别眨眼!缩小隧道,让你的AI模型“身轻如燕”!
摘要:CANN作为释放昇腾硬件算力的关键平台,通过深耕先进的模型压缩技术,聚力打造AMCT模型压缩工具,在保证模型精度前提下,不遗余力地降低模型的存储空间和计算量. 随着深度学习的发展,推理模型巨大的 ...
- Linux下软链接与硬链接的区别
由于下面会说到inode,所以如果没有了解过,请务必搞懂inode的真正含义,厚颜无耻的推荐我的一篇博客:Linux磁盘与文件系统管理 如果我们在系统中新建一个文件,我们看到的文件名实际上只是表面现象 ...
- Iceberg概述
背景 随着大数据领域的不断发展, 越来越多的概念被提出并应用到生产中而数据湖概念就是其中之一, 其概念参照阿里云的简介: 数据湖是一个集中式存储库, 可存储任意规模结构化和非结构化数据, 支持大数据和 ...