LOJ#3119 随机立方体

解:极大值至少为1。我们尝试把最大那个数的影响去掉。
最大那个数所在的一层(指一个三维十字架)都是不可能成为最大值的。
考虑容斥。我们试图求除了最大值以外至少有k个极大值的概率。
我们钦定某k个位置是极大值,且钦定顺序。这样的方案数有ni↓mi↓Li↓种。
考虑每种方案的概率。从小到大考虑,对于最小的那个极大值,如果是极大值,就要大于一个三维十字架中的所有数,这样的概率是1 / 集合大小。
对于次小极大值,它要大于自己的三维十字架和最小值的三维十字架的并。概率还是1 / 集合大小。
于是依次考虑完每个极大值,把概率求积即可。容斥的时候记得乘组合数。
#include <bits/stdc++.h> typedef long long LL; const int MO = , N = ; int n, m, K, L;
int fac[N], inv[N], invn[N]; inline int qpow(int a, int b) {
int ans = ;
while(b) {
if(b & ) ans = 1ll * ans * a % MO;
a = 1ll * a * a % MO;
b = b >> ;
}
return ans;
}
inline int Inv(int x) {
if(x < N) return inv[x];
return qpow(x, MO - );
}
inline int C(int n, int m) {
return 1ll * fac[n] * invn[m] % MO * invn[n - m] % MO;
}
inline int Down(int n, int k) {
return 1ll * fac[n] * invn[n - k] % MO;
}
inline int iDown(int n, int k) {
return 1ll * invn[n] * fac[n - k] % MO;
}
inline int dec(int x) {
return 1ll * (n - x) * (m - x) % MO * (L - x) % MO;
} inline void solve() { scanf("%d%d%d%d", &n, &m, &L, &K);
int ans = , lm = std::min(std::min(n, m), L);
int V = 1ll * n * m % MO * L % MO;
for(int i = K - ; i <= lm; i++) {
int p = ;
for(int j = ; j <= i; j++) {
p = 1ll * p * (n - i + j - ) % MO * (m - i + j - ) % MO * (L - i + j - ) % MO;
p = 1ll * Inv((V - dec(j) + MO) % MO) * p % MO;
}
p = 1ll * p * C(i, K - ) % MO;
if((K - i) & ) {
ans = (ans + p) % MO;
}
else {
ans = (ans - p) % MO;
}
}
printf("%d\n", (ans + MO) % MO);
return;
} int main() { fac[] = inv[] = invn[] = ;
fac[] = inv[] = invn[] = ;
for(int i = ; i < N; i++) {
fac[i] = 1ll * i * fac[i - ] % MO;
inv[i] = 1ll * inv[MO % i] * (MO - MO / i) % MO;
invn[i] = 1ll * inv[i] * invn[i - ] % MO;
} //printf(" = %lld \n", 142606337ll * fac[8] % MO); int T;
scanf("%d", &T);
while(T--) {
solve();
} return ;
}
50分代码,帮助理解
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
typedef long long LL;
const int MO = , N = ;
int n, m, K, L;
int fac[N], inv[N], invn[N], val[N], ival[N], D[N];
inline int qpow(int a, int b) {
int ans = ;
while(b) {
if(b & ) ans = 1ll * ans * a % MO;
a = 1ll * a * a % MO;
b = b >> ;
}
return ans;
}
inline int Inv(int x) {
if(x < N && x >= ) return inv[x];
return qpow(x, MO - );
}
inline int C(int n, int m) {
if(n < || m < || n < m) return ;
return 1ll * fac[n] * invn[m] % MO * invn[n - m] % MO;
}
inline int Down(int n, int k) {
return 1ll * fac[n] * invn[n - k] % MO;
}
inline int iDown(int n, int k) {
return 1ll * invn[n] * fac[n - k] % MO;
}
inline int dec(int x) {
return 1ll * (n - x) * (m - x) % MO * (L - x) % MO;
}
inline void solve() {
scanf("%d%d%d%d", &n, &m, &L, &K);
K--;
int ans(), lm(std::min(std::min(n, m), L));
int V = 1ll * n * m % MO * L % MO;
val[] = ;
D[] = V;
for(register int i(); i <= lm; ++i) {
D[i] = (dec(i));
val[i] = 1ll * val[i - ] * (V - D[i]) % MO;
}
ival[lm] = qpow(val[lm], MO - );
for(register int i(lm - ); i >= K; --i) {
ival[i] = 1ll * ival[i + ] * (V - D[i + ]) % MO;
}
int t = 1ll * Down(n - , K - ) * Down(m - , K - ) % MO * Down(L - , K - ) % MO;
for(register int i(K); i <= lm; ++i) {
//t = 1ll * t * (n - i) % MO * (m - i) % MO * (L - i) % MO * inv[i - K] % MO;
t = 1ll * t * D[i] % MO * inv[i - K] % MO;
int p = 1ll * t * ival[i] % MO * fac[i] % MO;
((K + i) & ) ? ans -= p : ans += p;
if(ans >= MO) ans -= MO;
if(ans < ) ans += MO;
}
ans = 1ll * ans * invn[K] % MO;
printf("%d\n", ans < ? ans + MO : ans);
return;
}
/*
1
1000 1000 1000 10
*/
int main() {
fac[] = inv[] = invn[] = ;
fac[] = inv[] = invn[] = ;
for(register int i(); i < N; ++i) {
fac[i] = 1ll * i * fac[i - ] % MO;
inv[i] = 1ll * inv[MO % i] * (MO - MO / i) % MO;
invn[i] = 1ll * inv[i] * invn[i - ] % MO;
}
//printf(" = %lld \n", 142606337ll * fac[8] % MO);
int T;
scanf("%d", &T);
while(T--) {
solve();
}
return ;
}
AC代码
这题非常卡常...

LOJ#3119 随机立方体的更多相关文章
- LOJ 3119: 洛谷 P5400: 「CTS2019 | CTSC2019」随机立方体
题目传送门:LOJ #3119. 题意简述: 题目说的很清楚了. 题解: 记恰好有 \(i\) 个极大的数的方案数为 \(\mathrm{cnt}[i]\),则答案为 \(\displaystyle\ ...
- 【CTS2019】随机立方体(容斥)
[CTS2019]随机立方体(容斥) 题面 LOJ 洛谷 题解 做这道题目的时候不难想到容斥的方面. 那么我们考虑怎么计算至少有\(k\)个极大值的方案数. 我们首先可以把\(k\)个极大值的位置给确 ...
- 「CTS2019 | CTSC2019」随机立方体 解题报告
「CTS2019 | CTSC2019」随机立方体 据说这是签到题,但是我计数学的实在有点差,这里认真说一说. 我们先考虑一些事实 如果我们在位置\((x_0,y_0,z_0)\)钦定了一个极大数\( ...
- [LOJ#3119][Luogu5400][CTS2019]随机立方体(容斥+DP)
https://www.cnblogs.com/cjyyb/p/10900993.html #include<cstdio> #include<algorithm> #defi ...
- LOJ #3119「CTS2019 | CTSC2019」随机立方体 (容斥)
博客链接 里面有个下降幂应该是上升幂 还有个bk的式子省略了k^3 CODE 蛮短的 #include <bits/stdc++.h> using namespace std; const ...
- 【LOJ】#3119. 「CTS2019 | CTSC2019」随机立方体
题解 用容斥,算至少K个极大值的方案数 我们先钦定每一维的K个数出来,然后再算上排列顺序是 \(w_{k} = \binom{n}{k}\binom{m}{k}\binom{l}{k}(k!)^3\) ...
- LOJ #3119. 「CTS2019 | CTSC2019」随机立方体 组合计数+二项式反演
好神的一道计数题呀. code: #include <cstdio> #include <algorithm> #include <cstring> #define ...
- [LibreOJ 3119]【CTS2019】随机立方体【计数】【容斥】
Description Solution 记\(N=min(n,m,l)\) 首先考虑容斥,记\(f(i)\)为至少有i个位置是极大的,显然极大的位置数上界是N. 那么显然\(Ans=\sum\lim ...
- LOJ3119. 「CTS2019 | CTSC2019」随机立方体 二项式反演
题目传送门 https://loj.ac/problem/3119 现在 BZOJ 的管理员已经不干活了吗,CTS(C)2019 和 NOI2019 的题目到现在还没与传上去. 果然还是 LOJ 好. ...
随机推荐
- python 之单例模式
单例模式1 单例=>只有一个单例2 静态方法+静态字段3 所有实例中等转的内容相同时 用单例模式class Sqllite: __instance=None def __init__(self) ...
- CSS——精灵技术
精灵技术产生的背景 图所示为网页的请求原理图,当用户访问一个网站时,需要向服务器发送请求,网页上的每张图像都要经过一次请求才能展现给用户. 然而,一个网页中往往会应用很多小的背景图像作为修饰,当网页中 ...
- LUOGU P1084 疫情控制(二分+贪心+树上倍增)
传送门 解题思路 比较神的一道题.首先发现是最小值问题,并且具有单调性,所以要考虑二分答案.其次有一个性质是军队越靠上越优,所以我们要将所有的军队尽量向上提,这一过程我们用倍增实现.发现这时有两种军队 ...
- idae for mac部分背景色修改收集
文章目录 所有字体默认颜色 终端背景色 行数line number背景色 line number颜色 编码区背景色 光标所在行背景色 未被使用的变量.方法或者类 控制台相关 选中文字的背景色 选中和未 ...
- windows 映射samba Linux服务器,输入正确的账号密码却提示“ 指定的网络密码不正确
重启Linux samba服务也没用,重启Linux和windows系统也没用,急!!! 最佳答案 linux中要添加对应的系统用户和samba用户useradd titiansmbpasswd -a ...
- python编码(31-01)
以什么方式编码,就以什么方式解码! 第一种编码与解码方式: encode()编码 decode()解码 type()查看数据类型 repr()查看数据内容 s = '你好'print(type(s)) ...
- 简单的UDP服务端和客户端示例
UDP的理论不再多说,我这里直接给出一个关于UDP的HelloWorld程序,代码明了,希望对刚入门的学生有所帮助! 当然,实际上,在这块我也刚入门! 首先写服务端代码,服务端邦定本地的IP和端口来监 ...
- BP 算法之一种直观的解释
0. 前言 之前上模式识别课程的时候,老师也讲过 MLP 的 BP 算法, 但是 ppt 过得太快,只有一个大概印象.后来课下自己也尝试看了一下 stanford deep learning 的 wi ...
- LuoguP3338 [ZJOI2014]力
题目描述 给出n个数qi,给出Fj的定义如下: \[F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_{i>j}\frac{q_i q_j}{(i ...
- Jpgraph小应用
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...