ARC093F Dark Horse

news/2025/2/5 22:48:05/文章来源:https://www.cnblogs.com/dcytrl/p/18700270

题意

\(2^n\) 个人按照满二叉树的形态进行淘汰赛,你是 \(1\) 号,有 \(m\) 个人能打赢你,其他人都打不过你。对于其他人,编号小的人胜利。你现在要把这些人放在满二叉树的叶子上并打淘汰赛,显然一共 \((2^n)!\) 种方案。问最终胜利的人是你的方案数。

\(n,m\le 16\)

分析

题目要求你 \(n\) 场比赛必须全赢,这比较难处理,考虑容斥,钦定若干场比赛你会输掉。当然,这种情况下即使你输了仍然会晋级。为了方便,不妨让你自己待在 \(1\) 号位置。如果某个人 \(i\) 要在第 \(j\) 轮比赛中胜出,那么你就需要在编号大于 \(i\)\(n-i\) 个数中选出 \(2^j-1\) 个炮灰。而编号越大,限制越紧,于是考虑从后往前 dp,设 \(f_{i,j}\) 表示 \([i,m]\) 中的人已经钦定 \(j\) 个人参加比赛的方案数,同时 \(j\) 也代表了已经钦定过的比赛编号集合,带容斥系数。转移则考虑当前是否钦定 \(i\) 胜利,若钦定则需要选出一场没钦定过的比赛 \(k\),然后在 \(2^n-a_i-j\) 个炮灰中选择 \(2^k-1\) 个,然后让炮灰们在 \(2^k\) 内部自由排序,然后乘上 \(-1\) 的容斥系数:

\[f_{i,j+\{k\}}\leftarrow -f_{i+1,j}\cdot \dbinom{2^n-a_i-j}{2^k-1}\cdot (2^k)! \]

不钦定则有 \(f_{i,j}\leftarrow f_{i+1,j}\)

计算答案时没被钦定的那些人在剩下的位置自由排序即可,有 \(ans\leftarrow f_{1,j}\cdot(2^n-1-j)!\)

最后,由于 \(1\) 可以在任何位置,而实际上 \(1\) 在哪个位置方案数都是一样的,于是答案自乘 \(2^n\) 即可,复杂度 \(O(2^nnm)\)

int n,m,a[maxn];
int f[maxn][maxm];
int fac[maxm],inv[maxm];
int ksm(int x,int y){int res=1;for(;y;y>>=1,x=x*x%mod)if(y&1)res=res*x%mod;return res;
}
int C(int x,int y){if(x<y)return 0;return fac[x]*inv[y]%mod*inv[x-y]%mod;
}
inline void adder(int &x,int y){x+=y,x=x>=mod?x-mod:x;}
inline void suber(int &x,int y){x-=y,x=x<0?x+mod:x;}
void init(int lim){fac[0]=1;rep(i,1,lim)fac[i]=fac[i-1]*i%mod;inv[lim]=ksm(fac[lim],mod-2);per(i,lim-1,0)inv[i]=inv[i+1]*(i+1)%mod;
}
inline void solve_the_problem(){n=rd(),m=rd(),init(1<<n);rep(i,1,m)a[i]=rd();f[m+1][0]=1;per(i,m,1)rep(S,0,(1<<n)-1)if(f[i+1][S]){adder(f[i][S],f[i+1][S]);rep(j,0,n-1)if(!((S>>j)&1)){suber(f[i][S|(1<<j)],f[i+1][S]*C((1<<n)-a[i]-S,(1<<j)-1)%mod*fac[1<<j]%mod);}}int ans=0;
//	write(f[1][1],32),write(f[1][2]);rep(S,0,(1<<n)-1)adder(ans,f[1][S]*fac[(1<<n)-1-S]%mod);write((1ll<<n)*ans%mod);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/879304.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本地部署DeepSeek教程

本地部署DeepSeek教程 步骤 本地部署DeepSeek教程步骤 1 安装Ollama 2 下载DeepSeek模型 3 可视化图文交互界面Chatbox(可选)1 安装Ollama 访问Ollama官网下载Ollama,默认安装即可。安装完成后打开终端(我这里是windows系统),输入: ollama help即可查看ollama选项,且可…

OpenLDAP篇-安装OpenLDAP服务01

1、OpenLDAP统⼀⽤户认证系统 1.1 为什么需要OpenLDAP 在没有OpenLDAP统⼀⽤户认证系统的环境中,往往会⾯临如下问题:1、当⽤户需要访问多台服务器时,管理员需要在每台服务器上⼿动创建账户。如果员⼯离职,还需逐台删除账户,整体操作繁琐且容易出现遗漏的情况,因此存在较…

集训3 20240127

集训3 20240127 牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A: 题目大意:给定 \(n\) ,两个人轮流可以使 \(n\) 减去一个任意小于它且与它互质的数,求最后甲能否取胜 #include<bits/stdc++.h>using namespace std;int main() {long long n;cin&g…

RocketMQ实战—4.消息零丢失的方案

大纲 1.全链路分析为什么用户支付完成后却没有收到红包 2.RocketMQ的事务消息机制实现发送消息零丢失 3.RocketMQ事务消息机制的底层实现原理 4.是否可以通过同步重试方案来代替事务消息方案来实现发送消息零丢失 5.使用RocketMQ事务消息的代码案例细节 6.同步刷盘+Raft协议同步…

qoj7301 AGC036D 题解

qoj7301 orz yxx 有一个很牛的状态设计 \(f_{i,j,0/1}\),\(0\) 为 \(a_{i-1}>a_i\),\(j\) 记录 \(a_{i-1}\) 的值,\(a_i\) 的值未定;\(1\) 为 \(a_{i-1}<a_i\),\(j\) 记录 \(a_i\) 的值 这样可以完美解决 \(a_{i-1}>a_i<a_{i+1}\) 的问题 转移和优化都是简单的…

【PyTorch】对比Torch和Numpy

该部分主要通过对比Torch和Numpy基础知识,方便大家了解PyTorch。Numpy是处理数据的模块,处理各种矩阵的形式来多核加速运算。 Torch自称为神经网络界的Numpy,因为它能将torch产生的tensor(张量)放在 GPU 中加速运算(前提是你有合适的 GPU),就像Numpy会把array放在CPU中…

十. Redis 事务和 “锁机制”—— 并发秒杀处理的详细说明

十. Redis 事务和 “锁机制”——> 并发秒杀处理的详细说明 @目录十. Redis 事务和 “锁机制”——> 并发秒杀处理的详细说明1. Redis 的事务是什么?2. Redis 事务三特性3. Redis 关于事务相关指令 Multi、Exec、discard和 “watch & unwatch”3.1 快速入门(演示…

使用Tauri框架打造的FPS透视

使用Tauri框架打造的FPS透视,使用javascript读内存绘制透视框使用Vue前端和Rust后端打造FPS透视 前端使用P5js进行canvas绘制 后端封装内存读取工具,前端快速编写代码无需重启调试 Vue前端与后端通讯获取内存数据并在前端渲染 作者声明 [仅供学习 请勿非法用途 从事非法用途出…

Mybatis 动态查询

where和if标签搭配 user表如下图所示 有时候,我们想在java程序中自定义查询条件,例如,我想查询user表,有时候我输入name=“狂神”,查询所有name为狂神的数据,有时候我输入pwd=‘123456’,想查询所有密码为123456的数据,有时候我想查询name为狂神同时密码为123456的数据…

一文搞懂企业架构与DDD的融合

在当今数字化时代,企业架构(EA)和领域驱动设计(DDD)成为了构建高效、灵活且可扩展软件系统的关键方法论。本文将深入探讨企业架构TOGAF框架与DDD的融合之道,分析如何通过这种结合实现从业务战略到技术实现的无缝对接。今天聊聊企业架构与DDD如何进行融合。一、企业架构TO…

【监控】ElastAlert 实现 ES 钉钉群日志告警

一、ElastAlert 概述 ElastAlert 是一个开源的警报框架,由 Yelp 开发,它可以从 Elasticsearch 中提取数据并根据预定义的规则生成警报。ElastAlert 可用于监控您的日志和时间序列数据,以便在发生异常、错误或其他有趣的模式时立即采取行动。ElastAlert 能够与许多通知服务(…