[BZOJ2111][ZJOI2010]排列计数(DP+组合数)
来源:互联网 发布:在线询问医生软件 编辑:程序博客网 时间:2024/06/06 10:48
题意:求
这里建立
对于转移,首先计算出
首先,根节点的值必须为最小值。再考虑剩下的
同时注意坑点:
代码:
#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;inline int read() { int res = 0; bool bo = 0; char c; while (((c = getchar()) < '0' || c > '9') && c != '-'); if (c == '-') bo = 1; else res = c - 48; while ((c = getchar()) >= '0' && c <= '9') res = (res << 3) + (res << 1) + (c - 48); return bo ? ~res + 1 : res;}const int N = 1e6 + 5;int n, PYZ, f[N], fac[N], Log[N], inv[N];int qpow(int a, int b) { int res = 1; while (b) { if (b & 1) res = 1ll * res * a % PYZ; a = 1ll * a * a % PYZ; b >>= 1; } return res;}int C(int x, int y) { if (!y) return 1; int u = C(x / PYZ, y / PYZ), v = x % PYZ, w = y % PYZ, z; if (v < w) z = 0; else z = 1ll * (1ll * fac[v] * inv[w] % PYZ) * inv[v - w] % PYZ; return 1ll * u * z % PYZ;}int main() { int i, kx, l = 1, r = 1; n = read(); PYZ = read(); fac[0] = 1; Log[0] = -1; for (i = 1; i <= n; i++) fac[i] = 1ll * fac[i - 1] * i % PYZ, Log[i] = Log[i >> 1] + 1; kx = min(PYZ - 1, n); inv[kx] = qpow(fac[kx], PYZ - 2); for (i = kx - 1; i >= 0; i--) inv[i] = 1ll * inv[i + 1] * (i + 1) % PYZ; f[1] = f[2] = 1; f[3] = 2; for (i = 4; i <= n; i++) { if (i - (1 << Log[i]) + 1 <= (1 << Log[i] - 1)) l++; else r++; f[i] = 1ll * (1ll * C(i - 1, l) * f[l] % PYZ) * f[r] % PYZ; } printf("%d\n", f[n]); return 0;}
阅读全文
0 0
- [BZOJ2111][ZJOI2010]排列计数(DP+组合数)
- [BZOJ2111][ZJOI2010]Perm 排列计数(组合数学+lucas定理)
- [bzoj2111][ZJOI2010]Perm 排列计数(组合数学)
- bzoj2111【ZJOI2010】Perm 排列计数
- 【bzoj2111】[ZJOI2010]Perm 排列计数
- BZOJ2111 [ZJOI2010]Perm 排列计数
- BZOJ2111: [ZJOI2010]Perm 排列计数
- bzoj2111 [ZJOI2010]Perm 排列计数
- Bzoj2111:[ZJOI2010]Perm 排列计数:树形动态规划+组合数学
- 【bzoj2111】【zjoi2010】【perm排列计数】【dp+Lucas定理】
- [BZOJ2111][ZJOI2010]Perm 排列计数 && 数学
- 【递推+lucas定理】BZOJ2111 [ZJOI2010]Perm 排列计数
- 2111: [ZJOI2010]Perm 排列计数 DP+组合数学
- bzoj2111 Perm 排列计数 组合数学
- BZOJ 2111: [ZJOI2010]Perm 排列计数(简单组合数学)
- BZOJ 2111: [ZJOI2010]Perm 排列计数|组合数学|Lucas定理|DP
- bzoj 2111: [ZJOI2010]Perm 排列计数 (组合数学+Lucas定理)
- BZOJ 2111 ZJOI2010 Perm 排列计数 组合数学+Lucas定理
- Spring学习杂记(AOP)
- android 打开音视频图片文件(支持所有格式格式)
- 搭建私有云盘owncloud
- url问题
- 阿里云视频服务负载均衡架构
- [BZOJ2111][ZJOI2010]排列计数(DP+组合数)
- bzoj 2916: [Poi1997]Monochromatic Triangles(推理)
- 内核同步方法
- [初学笔记]矩阵
- STVP STM8 COSMIC C编译器在WIN10上的安装使用(附安装与破解软件)
- SessionState的几种设置
- 汉字Unicode解码
- leetcode 第四题:动态规划思想的应用
- unity3d发布EXE去掉边框