题解 [ZJOI2010]排列计数
好题。
% 你赛考到了不会摆烂,后来发现原来有向下取整,题面没有。。。(
就算有我也做不出来啦 qAq
首先我们会发现这个长得就是小根堆,答案就变成了小根堆的计数。
首先最小的数字肯定放在根的位置。我们令 \(f_i\) 为有 \(i\) 个数字组成的小根堆形态数量。显然小根堆左儿子和右儿子的数量是固定的,令左儿子 \(l\) 个右儿子 \(r\) 个,则显然有 \(f_i = C_{i - 1}^l\times f_l \times f_r\)。
组合数用 Lucas 求。
#include <iostream>
#define MAXN 1000000
using namespace std;
int n, m, Mod;
int qpow(int n, int m) {
int res = 1, bas = n;
while(m) {
if(m & 1) res = res * bas % Mod;
bas = bas * bas % Mod;
m >>= 1;
}
return res;
}
int fac[MAXN + 10];
void pre() {
fac[0] = 1, fac[1] = 1;
for(int p = 2; p <= MAXN; p++) fac[p] = fac[p - 1] * p % Mod;
}
int inv(int x) {
return qpow(x, Mod - 2);
}
int C(int n, int m) {//C_n^m
if(m > n) return 0;
return fac[n] * inv(fac[m]) % Mod * inv(fac[n - m]) % Mod;
}
int Lucas(int n, int m) {//C_n^m
if(!m) return 1;
else return Lucas(n / Mod, m / Mod) * C(n % Mod, m % Mod) % Mod;
}
int f[MAXN + 10];
int main() {
cin >> n >> Mod;
pre();
f[1] = 1, f[2] = 1, f[3] = 2;
int l = 1, r = 1, lim = 3;
for(int p = 4; p <= n; p++) {
if(l < lim) l++;
else r++;
if(l == r) lim = (lim + 1) * 2 - 1;
f[p] = Lucas(p - 1, l) * f[l] % Mod * f[r] % Mod;
}
cout << f[n] << endl;
}
题解 [ZJOI2010]排列计数的更多相关文章
- 【BZOJ2111】[ZJOI2010]排列计数(组合数学)
[BZOJ2111][ZJOI2010]排列计数(组合数学) 题面 BZOJ 洛谷 题解 就是今年九省联考\(D1T2\)的弱化版? 直接递归组合数算就好了. 注意一下模数可以小于\(n\),所以要存 ...
- [ZJOI2010]排列计数 (组合计数/dp)
[ZJOI2010]排列计数 题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有 ...
- 洛谷 P2606 [ZJOI2010]排列计数 解题报告
P2606 [ZJOI2010]排列计数 题目描述 称一个\(1,2,...,N\)的排列\(P_1,P_2...,P_n\)是\(Magic\)的,当且仅当对所以的\(2<=i<=N\) ...
- P2606 [ZJOI2010]排列计数
P2606 [ZJOI2010]排列计数 因为每个结点至多有一个前驱,所以我们可以发现这是一个二叉树.现在我们要求的就是以1为根的二叉树中,有多少种情况,满足小根堆的性质. 设\(f(i)\)表示以\ ...
- BZOJ2111:[ZJOI2010]排列计数——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=2111 https://www.luogu.org/problemnew/show/P2606#su ...
- [ZJOI2010]排列计数 题解
Description 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic ...
- ●洛谷P2606 [ZJOI2010]排列计数
题链: https://www.luogu.org/problemnew/show/P2606题解: 组合数(DP),Lucas定理 首先应该容易看出,这个排列其实是一个小顶堆. 然后我们可以考虑dp ...
- 洛谷P2606 [ZJOI2010]排列计数
题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic的,答案可能很 ...
- 洛谷P2606 [ZJOI2010]排列计数(数位dp)
题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic的,答案可能很 ...
- 洛谷P2606 [ZJOI2010]排列计数(组合数 dp)
题意 题目链接 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic的,答案 ...
随机推荐
- 初次邂逅 EasyExcel
前言 由于工作原因,有这种需求,就是把数据库中的数据导出成 Excel 表格,同时,也得支持人家用 Excel 表格导入数据到数据库.当前项目也是在用 EasyExcel,所以我不得不学啦! 以前学习 ...
- 【JVM调优】Day03:GC参数、OOM出现方式、调优实战
一.常用GC参数(20个左右即可) 1.各种垃圾回收器的参数 PS + PO 常用的只有几十个 CMS的比较多,不建议使用 G1的常用参数简单 ZGC只有三个参数 二.OOM出现的方式 1.写一个让内 ...
- 【每日一题】【排序】2021年11月13日-215. 数组中的第K个最大元素※
给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素. 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 方法1:调库 class Solution ...
- java并发数据结构之CopyOnWriteArrayList
CopyOnWriteArrayList是一个线程安全的List实现,其在对对象进行读操作时,由于对象没有发生改变,因此不需要加锁,反之在对象进行增删等修改操作时,它会先复制一个对象副本,然后对副本进 ...
- .net6+wpf制作指定局域网ip无法上网的arp欺诈工具
摘一段来自网上的arp欺诈解释:ARP欺骗(ARP spoofing),又称ARP毒化(ARP poisoning,网络上多译为ARP病毒)或ARP攻击,是针对以太网地址解析协议(ARP)的一种攻击技 ...
- 《HTTP权威指南》– 16.重定向与负载均衡
重定向 重定向 的目标是尽快地将HTTP报文发送到可用的Web服务器上去.在穿过因特网的路径上,HTTP报文传输的方向会受到HTTP应用程序和报文经由的路由设备的影响: 配置创建客户端报文的浏览器应用 ...
- Javascript | 分别用async await异步方法和Promise来实现一个简易的求职程序
关注公众号,一起交流,微信搜一搜: LiOnTalKING JavaScript Promise Promise 是一个 ECMAScript 6 提供的类,目的是更加优雅地书写复杂的异步任务 ...
- react项目中如何出现config文件夹
答案:运行 npm run eject 即可出现config文件夹 原因: 在package.json中:只有三个依赖,分别是react,react-dom,react-scripts,依赖为什么 ...
- 如何自定义调整bootstrap的模态框大小
背景 项目遇到一个需求,一个大表格放到模态框中,总是会出现撑开的效果,换了文档最大的modal-lg样式还不能解决,原因就是官方不支持更大号的模态框,需要自定义. 经过尝试理解,总结出调整模态框大小通 ...
- [seaborn] seaborn学习笔记8-避免过度绘图Avoid Overplotting
8 避免过度绘图Avoid Overplotting(代码下载) 过度绘图是散点图及几天常见图表中最常见的问题之一.如下图所示当数据集很大时,散点图的点会重叠,使得图形变得不可读.在这篇文章中,提出了 ...