[P4921] 情侣?给我烧了!
回顾一下错排公式
错排问题:
设n位错排数为D[n]。考虑元素1的位置,设置为k(有n-1中 );在考虑元素k的位置,
若为1,则转换为n-2位的错排;否则,视元素k为元素1(不能放在位置1),转换为n-1位的错排。
故 D[n]=(n-1)(D[n-1]+D[n-2]) D[1]=0 D[2]=1
也有公式D[n]=n!/e (e=1-1/1!+1/2!-1/3!+……+(-1)^n*1/n!)
设g(x)为x对情侣都在x排里都错开的方案数。
对于询问的k,其答案=C(n,k)A(n,k)pow(2,k)*g(n-k)
式子从左到右依次表示:
1)在n排中选出k排
2)每对情侣中占某一排排
3)情侣双方的位置互调
4)剩下n-k对情侣都要错开。
然后考虑g(x)的算法。
这是就要联想到错排序列的构造方法。
考虑第一排的情况:
1)俩男(x(x-1)种),考虑他们对应的俩女
a)这俩女在同一排((x-1)2种方案),此时转化为g(x-2)。
b)这俩女不在同一排, 就把她们当做一对情侣,转化为g(x-1)
2)俩女,与俩男同
3)左男右女,仔细想想是与俩男还是一样的。
4)左女右男,仔细想想是与俩男还还是一样的。
故转移为g(x)=(1+1+1+1)(x(x-1)((x-1)2*g(x-2)+g(x-1)))=4x(x-1)(2(x-1)g(x-2)+g(x-1))
显然g(1)=0, g(2)=8 //于是g(0)=1...
时间复杂图 O(Tn)
#include <bits/stdc++.h>
using namespace std;
const int N=1e3+7;
const int P=998244353;
int fac[N]={1};
int inv[N]={0,1};
int fiv[N]={1};
int g[N]={1};
int b[N]={1};
inline int C(int x,int y) {
return 1LL*fac[x]*fiv[y]%P*fiv[x-y]%P;
}
inline int A(int x,int y) {
return 1LL*fac[x]*fiv[x-y]%P;
}
inline int f(int n,int k) {
return 1LL*C(n,k)%P*A(n,k)%P*b[k]%P*g[n-k]%P;
}
int main() {
for(int i=1; i<N; ++i) fac[i]=1LL*fac[i-1]*i%P;
for(int i=2; i<N; ++i) inv[i]=1LL*(P-P/i)*inv[P%i]%P;
for(int i=1; i<N; ++i) fiv[i]=1LL*inv[i]*fiv[i-1]%P;
for(int i=2; i<N; ++i) g[i]=4LL*i*(i-1)%P*(2LL*(i-1)*g[i-2]%P+g[i-1])%P;
for(int i=1; i<N; ++i) b[i]=b[i-1]*2LL%P;
int T,n;
scanf("%d",&T);
while(T--) {
scanf("%d",&n);
for(int k=0; k<=n; ++k) {
printf("%d\n",f(n,k));
}
}
return 0;
}
[P4921] 情侣?给我烧了!的更多相关文章
- 洛谷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 ...
- 租酥雨的NOIP2018赛前日记
租酥雨的NOIP2018赛前日记 离\(\mbox{NOIP2018}\)只剩下不到一个月的时间辣! 想想自己再过一个月就要退役了,觉得有必要把这段时间的一些计划与安排记录下来. 就从国庆收假开始吧. ...
- P4921 【情侣?给我烧了!】
加强前这道题还是比较友好的 首先我们设\(g_x\)为x对情侣没有一对坐在一起的数量 然后答案就可以表示成:\(C_n^k*A_n^k*2^k*g_{n-k}\) 这里的复杂度是\(O(T*N)\), ...
- 【Luogu4931】情侣?给我烧了! 加强版(组合计数)
[Luogu4931]情侣?给我烧了! 加强版(组合计数) 题面 洛谷 题解 戳这里 忽然发现我自己推的方法是做这题的,也许后面写的那个才是做原题的QwQ. #include<iostream& ...
随机推荐
- python 网络内容: 初识socket
一 C\S架构,客户端服务端架构 客户端(client) : 享受服务端提供的服务 服务端(server) : 给客户端提供服务 B\S 浏览器和服务端 B(browser) 二 网络通信的整个流程( ...
- 好看的alert弹出框sweetalert
转载:https://www.cnblogs.com/lamp01/p/7215408.html
- mysql面试题集
Mysql 的存储引擎,myisam和innodb的区别. 答: 1.MyISAM 是非事务的存储引擎,适合用于频繁查询的应用.表锁,不会出现死锁,适合小数据,小并发.5.6之前默认myisam 2. ...
- vue上线后,背景图片路径错误
build 下的utils.js中添加配置 if (options.extract) { return ExtractTextPlugin.extract({ use: loaders, public ...
- tp3.2单函数总结
A($name,$layer='',$level=0) // 实例化多层控制器 格式:[资源://][模块/]控制器 B($name, $tag='',&$params=NUL ...
- Linux驱动之poll机制的理解与简单使用
之前在Linux驱动之按键驱动编写(中断方式)中编写的驱动程序,如果没有按键按下.read函数是永远没有返回值的,现在想要做到即使没有按键按下,在一定时间之后也会有返回值.要做到这种功能,可以使用po ...
- 5. Redis持久化
5. Redis持久化5.1 RDB5.1.1 触发机制5.1.2 流程说明5.1.3 RDB文件的处理5.1.4 RDB的优缺点5.2 AOF5.2.1 使用AOF5.2.2 命令写入5.2.3 文 ...
- MVC API 返回json 对象,使用netjson 返回
1.清除xml 格式 GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); 2. ...
- list(zip(*querySet))使用
teacher_cls_list = obj.cls.all().values_list('id', 'caption') #list(zip(*list)),将数组中的元组中的每一项取出,添加到一起 ...
- redis持久化详述
本来打算根据自己搜索的一些文章写些总结,后来发现了一篇好文,这里转载下,在自己博客里面记录下. 原文链接:https://www.cnblogs.com/kismetv/p/9137897.html ...