题解

用容斥,算至少K个极大值的方案数

我们先钦定每一维的K个数出来,然后再算上排列顺序是

\(w_{k} = \binom{n}{k}\binom{m}{k}\binom{l}{k}(k!)^3\)

然后有\((n - k)(m - k)(l - k)\)是可以随便填的

设\(all = nml,v_k = nml - (n - k)(m - k)(l - k)\)

设剩下的数填的方案是\(h_k\)

那么答案就是\(w_kh_k \binom{all}{all - v_{k}}(all - v_k)!\)

我们可以发现应该是每次选一个最大的作为极大值,然后再选出\(v[k] - v[k - 1] - 1\)作为极大值的陪葬而不能让它们去侵占下一个极大值的位置

所以\(h_{k} = h_{k - 1}\frac{(v_{k} - 1)!}{v_{k - 1} !}\)

然后至少k个的答案就是

\(w_{k}\frac{all!}{v_{k}!}\prod_{i = 1}^{k} \frac{(v_{k} - 1)!}{v_{k - 1}!}\)

我们发现后面那部分可以约掉很多

最后就是

\(all!w_{k}\prod_{i = 1}^{k}\frac{1}{v_k}\)

最后应该除下来一个\(all!\)因为算的是概率

设至少k个的答案是\(f_k\)

最后答案就是

\(ans = \sum_{i = K}^{min(N,M,L)}(-1)^{i - K}\binom{i}{K}f_{k}\)

代码

  1. #include <bits/stdc++.h>
  2. #define fi first
  3. #define se second
  4. #define pii pair<int,int>
  5. #define mp make_pair
  6. #define pb push_back
  7. #define space putchar(' ')
  8. #define enter putchar('\n')
  9. #define eps 1e-10
  10. #define MAXN 2005
  11. #define ba 47
  12. //#define ivorysi
  13. using namespace std;
  14. typedef long long int64;
  15. typedef unsigned int u32;
  16. typedef double db;
  17. template<class T>
  18. void read(T &res) {
  19. res = 0;T f = 1;char c = getchar();
  20. while(c < '0' || c > '9') {
  21. if(c == '-') f = -1;
  22. c = getchar();
  23. }
  24. while(c >= '0' && c <= '9') {
  25. res = res * 10 +c - '0';
  26. c = getchar();
  27. }
  28. res *= f;
  29. }
  30. template<class T>
  31. void out(T x) {
  32. if(x < 0) {x = -x;putchar('-');}
  33. if(x >= 10) {
  34. out(x / 10);
  35. }
  36. putchar('0' + x % 10);
  37. }
  38. const int MOD = 998244353;
  39. const int V = 5000000;
  40. int N,M,L,K;
  41. int fac[V + 5],invfac[V + 5],w[V + 5],v[V + 5],inv[V + 5];
  42. int inc(int a,int b) {
  43. return a + b >= MOD ? a + b - MOD : a + b;
  44. }
  45. int mul(int a,int b) {
  46. return 1LL * a * b % MOD;
  47. }
  48. int mul3(int a,int b,int c) {
  49. return mul(mul(a,b),c);
  50. }
  51. void update(int &x,int y) {
  52. x = inc(x,y);
  53. }
  54. int C(int n,int m) {
  55. if(n < m) return 0;
  56. else return mul(fac[n],mul(invfac[m],invfac[n - m]));
  57. }
  58. int fpow(int x,int c) {
  59. int res = 1,t = x;
  60. while(c) {
  61. if(c & 1) res = mul(res,t);
  62. t = mul(t,t);
  63. c >>= 1;
  64. }
  65. return res;
  66. }
  67. void pre_process() {
  68. fac[0] = 1;
  69. for(int i = 1 ; i <= V ; ++i) fac[i] = mul(fac[i - 1],i);
  70. invfac[V] = fpow(fac[V],MOD - 2);
  71. for(int i = V - 1 ; i >= 0 ; --i) invfac[i] = mul(invfac[i + 1],i + 1);
  72. }
  73. void Solve() {
  74. read(N);read(M);read(L);read(K);
  75. int T = min(min(N,M),L);
  76. for(int i = 0 ; i <= T ; ++i) {
  77. int t = mul3(fac[i],fac[i],fac[i]);
  78. w[i] = mul3(C(N,i),C(M,i),C(L,i));
  79. w[i] = mul(w[i],t);
  80. }
  81. int ALL = mul3(N,M,L);
  82. for(int i = 0 ; i <= T ; ++i) {
  83. int t = mul3(N - i,M - i,L - i);
  84. v[i] = inc(ALL,MOD - t);
  85. }
  86. int p = 1;
  87. for(int i = 1 ; i <= T ; ++i) {
  88. p = mul(p,v[i]);
  89. }
  90. inv[T] = fpow(p,MOD - 2);
  91. for(int i = T - 1 ; i >= 1 ; --i) inv[i] = mul(inv[i + 1],v[i + 1]);
  92. int res = 0;
  93. for(int i = K ; i <= T ; ++i) {
  94. if((i - K) & 1) update(res,MOD - mul3(C(i,K),inv[i],w[i]));
  95. else update(res,mul3(C(i,K),inv[i],w[i]));
  96. }
  97. out(res);enter;
  98. }
  99. int main() {
  100. #ifdef ivorysi
  101. freopen("f1.in","r",stdin);
  102. #endif
  103. pre_process();
  104. int T;
  105. read(T);
  106. while(T--) Solve();
  107. return 0;
  108. }

【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」随机立方体 组合计数+二项式反演

    好神的一道计数题呀. code: #include <cstdio> #include <algorithm> #include <cstring> #define ...

  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 3124 「CTS2019 | CTSC2019」氪金手游——概率+树形DP

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

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

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

  9. LOJ #2540. 「PKUWC 2018」随机算法(概率dp)

    题意 LOJ #2540. 「PKUWC 2018」随机算法 题解 朴素的就是 \(O(n3^n)\) dp 写了一下有 \(50pts\) ... 大概就是每个点有三个状态 , 考虑了但不在独立集中 ...

随机推荐

  1. Codevs 1331 西行寺幽幽子(高精度)

    1331 西行寺幽幽子 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在幻想乡,西行寺幽幽子是以贪吃闻名的亡灵.不过幽幽子可不是只 ...

  2. Codevs 1574 广义斐波那契数列(矩阵乘法)

    1574 广义斐波那契数列 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 广义的斐波那契数列是指形如an=p*an-1+q* ...

  3. Kernel Knights (Gym - 101480K)

    题目链接 #include <bits/stdc++.h> using namespace std; typedef long long ll; int a[200005]; //存放原始 ...

  4. [51nod1789] 跑得比谁都快

    题面 题解 设\(f[i]\)为根节点到\(i\)的最小耗时 设\(S\)为\(i\)的祖先集合, 可以得到 \[ f[i] = min(f[j] + (i - j)^p),j \in S \] 对于 ...

  5. 1.RabbitMq - Work 模式

    RabbitMq - Work 模式 一.什么是Work模式 如果有几个消息都需要处理,且每个消息的处理时间很长,仅有一个消费者,那么当它在处理一个消息的时候,其他消息就只有等待. 等待有时候是好的, ...

  6. 取模的n种情况

    一  减法 (a-b)%mod=(a%mod-b%mod+n)%mod; 二 大数 有乘法取模 可推出 如下代码 string s; cin>>s; ,len=s.length(); ;i ...

  7. FFmpeg之avformat_alloc_context()

    1. avformat_alloc_context /** * Allocate an AVFormatContext. * avformat_free_context() can be used t ...

  8. socket.io 的使用

    socket.io 是对 websocket 的封装,当你在客户端使用 socket.io 那么服务器也要对应的使用 目录结构: 使用方法: 客户端: socket.emit() 是提交数据,sock ...

  9. 关闭tslint

    只需要在tslint.config里配置一行 "defaultSeverity": "none",

  10. RedHat Enterprise7 搭建ISCSI

    IP 主机名 作用 10.45.129.113/24      外网 172.16.1.10/24        内网 rac1 RAC节点1 10.45.129.114/24      外网 172 ...