好神的一道计数题呀.

code:

  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <cstring>
  4. #define N 5000003
  5. #define ll long long
  6. #define mod 998244353
  7. #define setIO(s) freopen(s".in","r",stdin)
  8. using namespace std;
  9. int invg[N],dp[N],f[N],fac[N],inv[N];
  10. ll g[N];
  11. int qpow(int x,int y)
  12. {
  13. int tmp=1;
  14. for(;y;y>>=1,x=(ll)x*x%mod)
  15. if(y&1) tmp=(ll)tmp*x%mod;
  16. return tmp;
  17. }
  18. int C(int x,int y)
  19. {
  20. return (ll)fac[x]*inv[y]%mod*inv[x-y]%mod;
  21. }
  22. int INV(int x) { return qpow(x,mod-2); }
  23. void solve()
  24. {
  25. int n,m,l,mi,kth,i,j;
  26. scanf("%d%d%d%d",&n,&m,&l,&kth);
  27. mi=min(min(n,m),l);
  28. if(kth>mi) { printf("0\n"); return ; }
  29. ll tot=1ll*n*m%mod*l%mod,in=1ll;
  30. g[0]=tot%mod;
  31. for(i=1;i<=mi;++i)
  32. {
  33. g[i]=(tot-1ll*(n-i)*(m-i)%mod*(l-i)%mod+mod)%mod;
  34. in=in*g[i]%mod;
  35. }
  36. invg[mi]=qpow(in,mod-2);
  37. for(i=mi-1;i>=0;--i) invg[i]=(ll)invg[i+1]*g[i+1]%mod;
  38. f[0]=1;
  39. for(i=0;i<mi;++i) f[i+1]=(ll)f[i]*(n-i)%mod*(m-i)%mod*(l-i)%mod;
  40. for(i=0;i<=mi;++i) dp[i]=(ll)f[i]*invg[i]%mod;
  41. int ans=0;
  42. for(i=kth;i<=mi;++i)
  43. {
  44. int d=((i-kth)&1)?(mod-1):1;
  45. (ans+=(ll)d*C(i,kth)%mod*dp[i]%mod)%=mod;
  46. }
  47. printf("%d\n",ans);
  48. }
  49. void init()
  50. {
  51. fac[0]=1;
  52. for(int i=1;i<N;i++) fac[i]=(ll)fac[i-1]*i%mod;
  53. inv[N-1]=qpow(fac[N-1],mod-2);
  54. for(int i=N-2;i>=0;i--) inv[i]=(ll)inv[i+1]*(i+1)%mod;
  55. }
  56. int main()
  57. {
  58. // setIO("input");
  59. init();
  60. int i,j,T;
  61. scanf("%d",&T);
  62. while(T--) solve();
  63. return 0;
  64. }

  

LOJ #3119. 「CTS2019 | CTSC2019」随机立方体 组合计数+二项式反演的更多相关文章

  1. LOJ #3119「CTS2019 | CTSC2019」随机立方体 (容斥)

    博客链接 里面有个下降幂应该是上升幂 还有个bk的式子省略了k^3 CODE 蛮短的 #include <bits/stdc++.h> using namespace std; const ...

  2. 【LOJ】#3119. 「CTS2019 | CTSC2019」随机立方体

    题解 用容斥,算至少K个极大值的方案数 我们先钦定每一维的K个数出来,然后再算上排列顺序是 \(w_{k} = \binom{n}{k}\binom{m}{k}\binom{l}{k}(k!)^3\) ...

  3. 「CTS2019 | CTSC2019」随机立方体 解题报告

    「CTS2019 | CTSC2019」随机立方体 据说这是签到题,但是我计数学的实在有点差,这里认真说一说. 我们先考虑一些事实 如果我们在位置\((x_0,y_0,z_0)\)钦定了一个极大数\( ...

  4. LOJ 3119: 洛谷 P5400: 「CTS2019 | CTSC2019」随机立方体

    题目传送门:LOJ #3119. 题意简述: 题目说的很清楚了. 题解: 记恰好有 \(i\) 个极大的数的方案数为 \(\mathrm{cnt}[i]\),则答案为 \(\displaystyle\ ...

  5. LOJ3119. 「CTS2019 | CTSC2019」随机立方体 二项式反演

    题目传送门 https://loj.ac/problem/3119 现在 BZOJ 的管理员已经不干活了吗,CTS(C)2019 和 NOI2019 的题目到现在还没与传上去. 果然还是 LOJ 好. ...

  6. Loj #3124. 「CTS2019 | CTSC2019」氪金手游

    Loj #3124. 「CTS2019 | CTSC2019」氪金手游 题目描述 小刘同学是一个喜欢氪金手游的男孩子. 他最近迷上了一个新游戏,游戏的内容就是不断地抽卡.现在已知: - 卡池里总共有 ...

  7. LOJ #2542. 「PKUWC 2018」随机游走(最值反演 + 树上期望dp + FMT)

    写在这道题前面 : 网上的一些题解都不讲那个系数是怎么推得真的不良心 TAT (不是每个人都有那么厉害啊 , 我好菜啊) 而且 LOJ 过的代码千篇一律 ... 那个系数根本看不出来是什么啊 TAT ...

  8. LOJ 3124 「CTS2019 | CTSC2019」氪金手游——概率+树形DP

    题目:https://loj.ac/problem/3124 看了题解:https://www.cnblogs.com/Itst/p/10883880.html 先考虑外向树. 考虑分母是 \( \s ...

  9. @loj - 3120@ 「CTS2019 | CTSC2019」珍珠

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 有 \(n\) 个在范围 \([1, D]\) 内的整数均匀随机 ...

随机推荐

  1. 用赋值表达式作为bool值

    enum Status { stOk, stQuit, stError }; int main() { Status status; int n; bool b1 = (status = stOk); ...

  2. 20200104--python学习第六天

    今日学习 集合 内存相关知识 深浅拷贝 内容回顾与补充 (1)列表: (a)reverse 反转 v1=[1,2,3111,32,13] print(v1) v1.reverse() print(v1 ...

  3. ubuntu下安装secureCRT(含破解方法)

    一.下载SecureCRT安装文件及破解文件: 链接: https://pan.baidu.com/s/1A7opflFKSUi13PkzVCnhDQ 密码: gbf5 二.下载完成安装文件后安装Se ...

  4. HSRP 详解

    简介 HSRP(Hot Standby Router Protocol 热备份路由器协议)是Cisco的专有协议.HSRP把多台路由器组成一个“热备份组”,形成一个虚拟路由器.这个组内只有一个路由器是 ...

  5. Day7前端学习之路——多栏布局

    该文章主要讨论两栏布局和三栏布局,三栏布局包括很著名的圣杯布局和双飞翼布局 一.两栏布局的七种方法(左边固定,右边自适应) 原理: block水平元素宽度能够跟随父容器调节的流动特性,block级别的 ...

  6. AVR单片机教程——示波器

    本文隶属于AVR单片机教程系列.   在用DAC做了一个稍大的项目之后,我们来拿ADC开开刀.在本讲中,我们将了解0.96寸OLED屏,移植著名的U8g2库到我们的开发板上,学习在屏幕上画直线的算法, ...

  7. package包

    为什么需要package? 为了解决类之间的重名问题.为了方便管理类,合适的类放在合适的包. 怎么用package? 通常是类的第一句非注释性语句. 包名,域名倒着写,加上模块名,并与内部管理类. 命 ...

  8. IO包中的RandomAccessFile类

    RandomAccessFile RandomAccessFile 是随机访问文件的类.它支持对文件随机访问的读取和写入,即我们也可以从指定的位置读取/写入文件数据,因为该类在其内部封装了一个数组和指 ...

  9. 11种常用css样式之border学习

    边框border通常简写为"border:1px solid red;"但其实一个完整的border边框其实是由1.border-width/*边框宽度*/,2.border-st ...

  10. pycharm工具连接mysql数据库失败

    在使用pycharm开发工具连接mysql数据库时提示错误,信息如下: Server returns invalid timezone. Go to 'Advanced' tab and set 's ...