当前位置: 首页 > news >正文

P10004 [集训队互测 2023] Permutation Counting 2 题解 / 二维容斥

题目传送门:P10004 [集训队互测 2023] Permutation Counting 2。

考虑二项式反演,设 \(f_{i,j}\) 表示钦定 \(i\) 个位置为原排列上升位,\(j\) 个位置为逆排列上升位的方案数。

可以发现我们相当于钦定了原排列有 \(n-i\) 个上升连续段,逆排列有 \(n-j\) 个上升连续段,进一步观察发现,显然对于一个原排列的上升连续段的元素位置一定也上升,相当于一个原排列的连续段划分成了若干个逆排列的连续段,设 \(a_{i,j}\) 表示原排列第 \(i\) 个连续段有 \(a_{i,j}\) 个在逆排列的第 \(j\) 段,显然 \(a\) 需满足每一行每一列都不为 \(0\) 且总和为 \(n\),对这个东西计数。

\(g_{i,j}\) 为原排列有 \(i\) 个上升连续段,逆排列有 \(j\) 个上升连续段的方案数,再次考虑容斥,枚举行列钦定总和不为 \(0\) 的位置,然后剩下的位置的计数就是一个插板法。

那么 \(g_{i,j} = \sum\limits_{x=0}^i (-1)^{i-x} {i\choose x} \sum\limits_{y=0}^j (-1)^{j-y} {j\choose y} {n+xy-1 \choose xy-1}\)\(f_{i,j}=g_{n-i,n-j}\)

最后的答案直接二项式反演即可 \(ans_{i,j}=\sum\limits_{x=i}^n (-1)^{x-i} {x\choose i} \sum\limits_{y=j}^n (-1)^{y-j} {y\choose j} f_{x,y}\),直接做是 \(O(n^4)\) 的,考虑优化。

\(s_{x,j}= \sum\limits_{y=0}^j (-1)^{j-y} {j\choose y} {n+xy-1\choose xy-1}\),那么 \(g_{i,j}=\sum\limits_{x=0}^i (-1)^{i-x} {i\choose x} s_{x,j}\)

\(h_{x,j}=\sum\limits_{y=j}^n (-1)^{y-j} {y\choose j} f_{x,y}\),那么 \(ans_{i,j}=\sum\limits_{x=i}^n (-1)^{x-i} {x\choose i} h_{x,j}\)

这样就是 \(O(n^3)\) 的,有点卡常,可以预处理组合数减少取模量。

#include<bits/stdc++.h>
#define int long long
#define double long double
using namespace std;
const int N=510;
inline int read(){char c=getchar();int f=1,ans=0;while(c<48||c>57) f=(c==45?f=-1:1),c=getchar();while(c>=48&&c<=57) ans=(ans<<1)+(ans<<3)+(c^48),c=getchar();return ans*f;
}
int n,mod;
int fac[N*N],invfac[N*N],f[N][N],pw[N*N],s[N][N],h[N][N],c[N][N],t[N][N];
inline void add(int &x,int y){x+=y;if (x>=mod) x-=mod;}
void exgcd(int a,int b,int &x,int &y){if (b==0) x=1,y=0;else exgcd(b,a%b,y,x),y-=a/b*x;}
inline int inv(int a){int x,y;exgcd(a,mod,x,y);return (x%mod+mod)%mod;}
inline int C(int n,int m){return fac[n]*invfac[m]%mod*invfac[n-m]%mod;}
main(){n=read(),mod=read();fac[0]=invfac[0]=pw[0]=1;for (int i=1;i<=n*n+n;i++) fac[i]=fac[i-1]*i%mod,invfac[i]=invfac[i-1]*inv(i)%mod,pw[i]=pw[i-1]*(mod-1)%mod;c[0][0]=1;for (int i=1;i<=n;i++){c[i][0]=1;for (int j=1;j<=i;j++) c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;}for (int x=1;x<=n;x++) for (int y=1;y<=n;y++) t[x][y]=C(n+x*y-1,x*y-1);for (int x=0;x<=n;x++) for (int j=1;j<=n;j++) for (int y=0;y<=j;y++) add(s[x][j],pw[j-y]*c[j][y]%mod*t[x][y]%mod);for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) for (int x=0;x<=i;x++) add(f[i][j],pw[i-x]*c[i][x]%mod*s[x][j]%mod);for (int x=0;x<n;x++) for (int j=0;j<n;j++) for (int y=j;y<n;y++) add(h[x][j],pw[y-j]*c[y][j]%mod*f[n-x][n-y]%mod);for (int i=0;i<n;i++,puts("")) for (int j=0;j<n;j++){int ans=0;for (int x=i;x<n;x++) add(ans,pw[x-i]*c[x][i]%mod*h[x][j]%mod);printf("%lld ",ans);}return 0;
}
http://www.jsqmd.com/news/326195/

相关文章:

  • 高效文字转表格:核心技巧全解析
  • 2026年福州静音发电机出租机构合作案例多的排名情况
  • DL-FWI 方向论文笔记: Estimate near-surface velocity with reversals using deep learning and full-waveform i
  • 智能写作 AI 论文软件榜单:2026 年权威评测与选型指南
  • 2026年雄县高性价比的整装装修专业公司推荐,兴隆家具质量好
  • Excel邮件合并嵌入图片技巧
  • 智慧农业马铃薯土豆损坏发芽发霉缺陷检测数据集VOC+YOLO格式6995张5类别
  • 别只用ChatGPT!2026年这5个开源AI工具才是程序员的真正利器
  • 2026年优米眼镜店成配镜热门,潘家园配镜品牌推荐之选
  • 抖音代运营新选择:2026口碑源头厂家实力呈现,企业号代运营/短视频获客/小红书代运营,抖音代运营公司推荐排行
  • 学术写作必备的9款顶尖查重工具性能分析与实用指南
  • 2026双片全自动钉箱机企业口碑大比拼,优选名单在此,双片全自动钉箱机推荐精选国内优质品牌榜单
  • 口碑佳!2026年乏风取热箱批发厂家优选指南,翅片管/散热器/干冷器/空调机组/冷却器,乏风取热箱生产厂家推荐排行榜单
  • 聊聊天津靠谱的全屋定制,亿方凡打造环保家居方案
  • 高效学术写作:九大查重平台深度对比与应用策略
  • 找河北靠谱的卫浴木门公司该从哪方面考察
  • 销售团队最怕:AI筛掉的线索里,藏着下一个VIP。
  • 2026年无锡办公家具供应商推荐,性价比高的有哪些
  • 2026年发电车租赁公司排名,泉州哪家费用透明又服务周到
  • 根据四个偏振角度的偏振图像计算偏振斯托克斯矢量
  • 质量好的收缩包装机选购要点:厂家筛选全解析,套膜包装机/折盖封箱机/包装流水线/自动开箱机,收缩包装机加工厂口碑推荐榜
  • 2026年山东静音发电机租赁公司价格合理且服务好的排行榜
  • 随机树生成器
  • 自己写的黄金监控软件,可以推送到微信,伦敦金,民生黄金,浙商黄金
  • AI生产力工具横评:10款应用免费与付费功能差异解析
  • 实用指南:CCF CSP-J/S复赛----时间复杂度计算方法
  • 庐山市英语雅思培训机构推荐:2026权威测评出国雅思辅导机构口碑榜单
  • AI元人文构想:悬鉴《论马克思对李嘉图政治经济学的批判与超越》(2026年1月31日)
  • 2026年上海日语全日制学校排名,上海京岛义塾学校留学服务靠谱吗
  • 基于MPC的分布式电动汽车协同自适应巡航控制探索