火题小战 C. 情侣?给我烧了!

题目描述

有 \(n\) 对情侣来到电影院观看电影。在电影院,恰好留有 \(n\) 排座位,每排包含 \(2\) 个座位,共 \(2×n\) 个座位。

现在,每个人将会随机坐在某一个位置上,且恰好将这 \(2 × n\) 个座位坐满。

如果一对情侣坐在了同一排的座位上,那么我们称这对情侣是和睦的。

你的任务是求出共有多少种不同的就坐方案满足恰好有 \(k\) 对情侣是和睦的。

两种就坐方案不同当且仅当存在一个人在两种方案中坐在了不同的位置。不难发现,一共会有 \((2n)!\) 种不同的就坐方案。

由于结果可能较大,因此输出对 \(998244353\) 取模的结果。

输入格式

输入包含多组数据。

输入的第 \(1\) 行包含 \(1\) 个正整数 \(T\),表示数据的组数。

接下来 \(T\) 行,每行包含 \(2\) 个正整数 \(n,k\)。

输出格式

输出共 \(T\) 行。

对于每组输入数据,输出共 \(1\) 行,包含 \(1\) 个整数,表示恰好有 \(k\)对情侣和睦的就坐方案数。

输入输出样例

输入 #1

5

1 1

2 0

2 2

2333 666

2333333 1000000

输出 #1

2

16

8

798775522

300377435

说明/提示

对于 \(10 \%\) 的数据,满足 \(1 \leq T \leq 10, 1 \leq n \leq 5\)。

对于 40 % 的数据,满足 \(1 \leq n \leq 3 \times 10^3\)。

对于 \(100 \%\) 的数据,满足 \(1 \leq T \leq 2 \times 10^5, 1 \leq n \leq 5 \times 10^6\)。

分析

我们设 \(f[x]\) 为恰好有 \(x\) 对情侣都错开的方案数

我们考虑如何把其分解为子问题

首先我们可以从这 \(2x\) 个人中随意选取一个人

接下来我们再选取一个不能与他配对的人

总的方案数为 \(2x(2x-2)\)

对于我们选出的这两个人的配偶,如果我们把他们也强制配对的话那么这相当于一个规模为 \(x-2\) 的子问题,同时我们还要乘上 \(x-1\) 代表在剩下的 \(x-1\) 行中选出一行给他们坐,他们还可以交换位置,所以还要乘 \(2\)

如果我们不给他们强制配对的话,那么这就是一个规模为 \(x-1\) 的子问题

初始化 \(f[0]=1, f[1]=0\)

转移方程 \(f[x]=2x(2x-2)(f[x-1]+2(x-1)f[x-2])\)

我们考虑了恰好有 \(k\) 对情侣错开的的情况,下面要考虑本题的求解,即恰好有 \(k\)对情侣和睦的就坐方案数

首先我们要在 \(n\) 对情侣中选出 \(k\) 对情侣和睦,还要在 \(n\) 排座位中选出 \(k\) 排让他们坐,每对情侣在这 \(k\) 排可以随便坐,情侣两人也可以互换位置

因此最终的结果为

\[C_n^k\times C_n^k \times k! \times 2^k \times f[n-k]%mod
\]

代码

#include<bits/stdc++.h>
using namespace std;
const int mod=998244353;
const int maxn=5e6+5;
int ny[maxn],jc[maxn],jcc[maxn],f[maxn];
long long ksm(int ds,int zs){
long long ans=1;
while(zs){
if(zs&1) ans=ans*ds%mod;
ds=(long long)ds*ds%mod;
zs>>=1;
}
return ans%mod;
}
signed main(){
ny[1]=1;
for(int i=2;i<maxn;i++){
ny[i]=((long long)mod-mod/i)*ny[mod%i]%mod;
}
jc[0]=1,jcc[0]=1;
for(int i=1;i<maxn;i++){
jc[i]=(long long)jc[i-1]*i%mod;
jcc[i]=(long long)jcc[i-1]*ny[i]%mod;
}
f[0]=1,f[1]=0;
for(int i=2;i<maxn;i++){
f[i]=(long long)2*i*(2*i-2)%mod*((long long)f[i-1]%mod+(long long)(2*i-2)*f[i-2]%mod)%mod;
}
int t;
scanf("%d",&t);
while(t--){
int n,k;
scanf("%d%d",&n,&k);
long long ans=(long long)jc[n]*jcc[k]%mod*jcc[n-k]%mod*jc[n]%mod*jcc[n-k]%mod*ksm(2,k)%mod*f[n-k]%mod;
printf("%lld\n",ans%mod);
}
return 0;
}

火题小战 C. 情侣?给我烧了!的更多相关文章

  1. # 火题小战 A.玩个球

    火题小战 A.玩个球 题目描述 给你 \(n\) 种颜色的球,每个球有 \(k\) 个,把这 \(n\times k\) 个球排成一排,把每一种颜色的最左边出现的球涂成白色(初始球不包含白色),求有多 ...

  2. 火题小战 B. barbeque

    火题小战 B. barbeque 题目描述 \(Robbery\) 是一个大吃货(雾) 某个神奇的串由牛肉和青椒构成,于是\(Robbery\)购买了\(n\)个餐包来自己做这个串,每个餐包中有一些牛 ...

  3. [编程题] 小易喜欢的数列 dp

    https://www.nowcoder.com/question/next?pid=6291726&qid=112729&tid=12736753 [编程题] 小易喜欢的数列 时间限 ...

  4. YTU 2960: 改错题--小鼠标,你要干什吗?

    2960: 改错题--小鼠标,你要干什吗? 时间限制: 1 Sec  内存限制: 128 MB 提交: 118  解决: 62 题目描述 鼠标双击不同的图标产生不同的效果,比如双击文档(documen ...

  5. 从乐视和小米“最火电视”之战 看PR传播策略

        今年的双11够热闹.一方面,阿里.京东.国美.苏宁等电商巨头卯足了劲儿.试图在双11期间斗个你死我活,剑拔弩张的气势超过了以往不论什么一场双11:还有一方面.不少硬件厂商.家电企业也来凑双11 ...

  6. 火题大战Vol.1 A.

    火题大战Vol.1 A. 题目描述 给定两个数\(x\),\(y\),比较\(x^y\) 与\(y!\)的大小. 输入格式 第一行一个整数\(T\)表示数据组数. 接下来\(T\)行,每行两个整数\( ...

  7. 火题大战Vol.0 B 计数DP

    火题大战Vol.0 B 题目描述 \(n\) 个沙茶,被编号 \(1\)~$ n$.排完队之后,每个沙茶希望,自己的相邻的两人只要无一个人的编号和自己的编号相差为 \(1\)(\(+1\) 或\(-1 ...

  8. 快速入门PaddleOCR,并试用其开发一个搜题小工具

    介绍 PaddleOCR 是一个基于百度飞桨的OCR工具库,包含总模型仅8.6M的超轻量级中文OCR,单模型支持中英文数字组合识别.竖排文本识别.长文本识别.同时支持多种文本检测.文本识别的训练算法. ...

  9. H5版俄罗斯方块(4)---火拼对战的雏形

    前言: 勿忘初心, 本系列的目标是实现一款类似QQ"火拼系列"的人机对战版俄罗斯方块. 在完成了基本游戏框架和AI的算法探索后, 让我们来尝试一下人机大战雏形编写. 本系列的文章链 ...

随机推荐

  1. 计算思维(Computational Thinking)在少儿编程中的体现

    本文主要针对少儿编程从业人员及正在学习编程的学生家长 大家好,我是C大叔,国内早期的少儿编程从业人员.一直以来都是在做scratch,JavaScript,python以及信息学奥赛C++的讲师,教研 ...

  2. p71_文件传送协议FTP

    一.FTP服务器和用户端 FTP是基于客户/服务器(C/S) 的协议. 用户通过一一个客户机程序连接至在远程计算机上运行的服务器程序. 依照FTP协议提供服务,进行文件传送的计算机就是FTP服务器. ...

  3. 题解 洛谷 P3298 【[SDOI2013]泉】

    考虑到年份数很小,只有 \(6\),所以可以 \(2^6\) 来枚举子集,确定流量指数对应相同的位置,然后通过哈希和排序来计算相同的方案数. 但是这样计算出的是大于等于子集元素个数的方案数,所以还需要 ...

  4. JS获取格式为YYYY-MM-DD的当前日期

    JS获取格式为YYYY-MM-DD的当前日期 var date = new Date();  var mon = date.getMonth() + 1; var day = date.getDate ...

  5. 水题-------判断Digit Generator

    题目链接:https://vjudge.net/problem/UVA-1583 题意:给出一个数N,判断最小的数x使x+(x各位数字的和)=N 题解:这是一个暴力求解题,不过有技巧,x各位数字的和最 ...

  6. 数据库(十二):pymysql

    进击のpython ***** 数据库--pymysql 数据库就算是学习完毕了,但是我们学习数据库的本质是什么? 是想让数据库像文件存储一样将信息存储起来供我们调用 那回归本行,我就应该是用pyth ...

  7. Shell分析服务器日志,解锁各种新姿势

    1.查看有多少个IP访问: awk '{print $1}' log_file|sort|uniq|wc -l 2.查看某一个页面被访问的次数: grep "/index.php" ...

  8. Kaggle 入门题-泰坦尼克号灾难存活预测

    这个题目的背景概况来讲就是基于泰坦尼克号这个事件,然后大量的人员不幸淹没在这个海难中,也有少部分人员在这次事件之中存活,然后这个问题提供了一些人员的信息如姓名.年龄.性别.票价,所在客舱等等一些信息, ...

  9. 第六章 文件&IO流

    6.1.File类 描述:该类是文件和目录路径名的抽象表示 构造方法: 方法 描述 public File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的File ...

  10. Day03_WebCrawler(网络爬虫)

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"webcrawler"获取视频和教程资料! b站在线视 ...