2025.02.25 CW 模拟赛 B. 大根堆
B. 大根堆
思路
考虑倒着插入每个节点以满足大根堆的性质, 那么最开始我们只有一个位置可供插入. 如果当前插入的点不一定是叶子结点, 那么可供插入的位置就会多一个; 如果其一定是叶子结点, 那么可供插入的位置就会少一个, 乘起来即可.
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
void init() {
scanf("%d %d", &n, &sz);
for (int i = 1, x; i <= sz; ++i) {
scanf("%d", &x);
f[x] = true;
}
}
void calculate() {
int ans = 1, tmp = 1;
for (int i = n; i; --i) {
ans = 1ll * ans * (tmp++) % mod;
if (f[i]) tmp -= 2;
}
printf("%d", ans);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步