题意

题意很清楚 \滑稽

分析

  • 对于每一个询问 \(k\) ,记 \(g(x)\) 表示 \(x\) 对情侣都错开的方案总数,那么答案可以写成如下形式:

\[{ans}_k= \binom{n}{k}\times A_n^k\times 2^k\times g(n-k)
\]

  • 考虑如何求 \(g(x)\) (一个错位排列)。

  • 考虑第一排,一共有三种情况:两男两女或者一男一女(不配对)。

    • 两男:顺次选出两男的方案数为 \(x(x-1)\) ,然后考虑他们的配偶在之后的配对情况:

      • 如果强制不配对,那么把她们看成一对情侣来保证之后的过程中不配对(gay里gay气),即 \(g(x-1)\) 。

      • 如果强制配对,那么在剩下的 \(x-1\) 排中选择一排,两人顺序可以交换,转移为 \(2(x-1)\times g(x-2)\)。

    • 两女:方案数显然和两男的情况相同。

    • 一男一女:枚举一男一女,可以交换顺序的方案数为 \(x(x-1)\) ,转移其实是一样的,

  • 所以我们得到:\(g(x)=4x(x-1)\times[g(x-1)+2(x-1)\times g(x-2)]\) 。

  • 单次处理 \(g\) 复杂度 \(O(n)\) ,每次回答枚举 \(k\) 复杂度 \(O(n)\) ,总时间复杂度为 \(O(n)\) 。

代码

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pb push_back
typedef long long LL;
inline int gi(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-48;ch=getchar();}
return x*f;
}
template<typename T>inline bool Max(T &a,T b){return a<b?a=b,1:0;}
template<typename T>inline bool Min(T &a,T b){return b<a?a=b,1:0;}
const int N=2004,mod=998244353;
int T,n;
LL fac[N],inv[N],invfac[N],bin[N],g[N];
void add(LL &a,LL b){a+=b;if(a>=mod) a-=mod;}
LL Pow(LL a,LL b){
LL res=1ll;
for(;b;b>>+1,a=a*a%mod) if(b&1) res=res*a%mod;
return res;
}
LL C(int n,int m){
return fac[n]*invfac[n-m]%mod*invfac[m]%mod;
}
int main(){
fac[0]=invfac[0]=inv[1]=bin[0]=1;
rep(i,1,N-1){
if(i^1) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
fac[i]=fac[i-1]*i%mod;
invfac[i]=invfac[i-1]*inv[i]%mod;
bin[i]=bin[i-1]*2%mod;
} g[0]=1,g[1]=0;
rep(n,2,1000) g[n]=4ll*n*(n-1)%mod*(g[n-1]+2*(n-1)*g[n-2])%mod; T=gi();
while(T--){
n=gi();
rep(k,0,n) printf("%lld\n",C(n,k)*C(n,k)%mod*fac[k]%mod*bin[k]%mod*g[n-k]%mod);
}
return 0;
}

最新文章

  1. sql 单个字段去重查询 distinc 和 group by的效率问题
  2. centos 格式化分区
  3. jquery 图片轮播demo实现
  4. Firefox 及其 插件“个性化设置”备份
  5. Extjs读取更改或者发送ajax返回请求的结果简单封装
  6. 转:SQL的内连接与外连接
  7. git在本地创建远程仓库
  8. 关于knob.js进度插件的使用
  9. TDD(测试驱动开发)的推广方法论
  10. shiro基础学习(三)&mdash;shiro授权
  11. Html 经典布局(一)
  12. 【学习】js学习笔记:数组(一)
  13. 让oracle数据库的表的id自动递增
  14. 容器部署解决方案Docker
  15. 放大镜js实现效果
  16. 记一次vcsa6修复过程
  17. 方差variance, 协方差covariance, 协方差矩阵covariance matrix
  18. 通过完整示例来理解如何使用 epoll
  19. google全球ip地址库
  20. DataSnap 连接池 DSServer1Disconnect

热门文章

  1. IIS 7 反向代理 URL重写 转发动态请求
  2. spark-submit提交参数设置
  3. 【译文】MySQL InnoDB 使用的锁分析
  4. JAVA反射机制教程-获取类对象
  5. JSTORM 问题排查
  6. 1415. [NOI2005]聪聪和可可【记忆化搜索DP】
  7. linux下10款markdown软件
  8. OpenStack Grizzly详细安装指导
  9. ArrayList实现原理及源码分析之JDK8
  10. mybatis框架下使用generator插件自动生成domain/mapping/mapper