arc 093 F Dark Horse
题意: 我们现在有一个有2的n次方的人的淘汰赛,每次相邻的两个人打,赢得人晋级,以此类推到只剩一个人为止。给定一个集合a[i], 规则如下:1号和a[i]的人打a[i]胜,1号和其他人打 1号胜利,其他号和其他的打,字典序小的胜。问1号胜利的方案数有多少种。
我们先假装第一个人就在第一个位置,由于都是从一个2^1的人中取胜,到从2^n的人中取胜,所以一号人在哪方案数都是一样的,所以我们可以假装第一个人就在第一个位置,最后算答案的时候×2^n即可。
接着我们观察1的对手是谁, 我们假设n=3, 那么 n的对手就是 2 , [3,4] , [5,8] 的胜者,即为1向后推 2^0次方的长度到2^n-1次方的长度每一个区间的胜者,所以这些区间的胜者不能为a[i]。由于都和1无关,所以要求就是这些区间中字典序最小的不能是a[i]。正着做不好做,我们考虑某个区间胜者是a[i]的方案数,最后容斥一下就好了。
令dp[i][state]表示考虑到第i个a[i]了,有那些区间的胜者已经是a[i]了。很显然每个a[i]可以有两种选择,第一种不选,第二种找一个没有选的区间加入到其中,设区间长度为len,就还要找 len-1个比它大的填入到这个区间里。 由于dp的状态的0,1就表示每个区间选了没选,所以state的数值就表示了有多少个人选了。这里注意到要找的是比a[i]大的并不是很好找,所以我们按a[i]从大到小排序,那么这时比a[i]大的数字就是n-state-a[i]个了。
等等这时候不就求出来了吗,要容斥啥??? 因为对于没有选的区间,我们是随便放剩下的,所以可能会把是a[i]的放到某个区间做最小值了。
所以 如果state里有j个1,那么我们求出来的就是 有大于等于j的区间被a[i]放了的方案数,我们就根据j的奇偶性加加减减就好啦,最后记得乘2的n此方。
下附AC代码。
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define maxn (1<<17)+5
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
int n,m;
int a[20];
ll fac[maxn],inv[maxn];
ll dp[20][maxn];
ll quickpow(ll p,ll k)
{ll ans=1;while(k){if(k&1)ans=(ans*p)%mod;p=(p*p)%mod;k>>=1;}return ans;
}
ll c(ll n1,ll m1)
{if(n1<m1) return 0;return fac[n1]*inv[m1]%mod*inv[n1-m1]%mod;
}
int getbit(int now)
{int res=0;while(now)res+=(now&1),now>>=1;return res;
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)scanf("%d",&a[m-i+1]);fac[0]=1;for(int i=1;i<=maxn-5;i++)fac[i]=fac[i-1]*i%mod;inv[maxn-5]=quickpow(fac[maxn-5],mod-2);for(int i=maxn-5;i>=1;i--)inv[i-1]=inv[i]*i%mod;inv[0]=1;dp[0][0]=1;for(int i=0;i<m;i++){for(int state=0;state<(1<<n);state++)if(dp[i][state]){dp[i+1][state]+=dp[i][state];dp[i+1][state]%=mod;for(int j=0;j<n;j++)if(((1<<j)&state)==0){dp[i+1][state|(1<<j)]+=(dp[i][state]*fac[(1<<j)]%mod*c((1<<n)-state-a[i+1],(1<<j)-1)%mod);dp[i+1][state|(1<<j)]%=mod;}}}ll ans=0;for(int state=0;state<(1<<n);state++){int cnt=getbit(state);ll f=(cnt&1)?-1:1;ans=(ans+f*dp[m][state]*fac[(1<<n)-state-1])%mod;}ans=(ans%mod+mod)%mod;printf("%lld\n",(ans*(1<<n))%mod);
}
Especially For U
By ZRX
arc 093 F Dark Horse相关推荐
- [最小割] ARC 074 F - Lotus Leaves
Solution Solution 这样建图:对每一行每一列都建一个点,连向行内的荷叶. 那这道题就相当于删去最少的点使得源汇点不连通. 按这里一样建图就好了. 又忘记写当前弧优化了 #include ...
- Atcoder 乱做
最近感觉自己思维僵化,啥都不会做了-- ARC103 F Distance Sums 题意 给定第 \(i\) 个点到所有点的距离和 \(D_i\) ,要求构造一棵合法的树.满足第 \(i\) 个点到 ...
- 足球相关的英文专业术语(持续更新中...Ctrl+F可直接进行搜索)
技术 long pass 长传 close pass, short pass 短传 flank pass 边线传球 high lobbing pass 高吊传球 scissor pass 交叉传球 v ...
- php判断数组不重复的元素,php从数组中随机选择若干不重复元素
php从数组中随机选择若干唯一元素 /* * $array = the array to be filtered * $total = the maximum number of items to r ...
- 「版权流氓」终结者:6天时间,堆出687亿段旋律
萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 世界上所有的音乐,都在这个网站里了. 准确地说,是一个八度内,所有音符的组合方法. 两个程序员Riehl和Rubin,用6天时间,以每秒30 ...
- 五道java小题,补更四道java小题
一:分析以下需求,并用代码实现 1.定义List集合,存入多个字符串 2.删除集合中字符串"def" 3.然后利用迭代器遍历集合元素并输出 1 import ...
- 【NLP】从整体视角了解情感分析、文本分类!
作者:太子长琴,算法工程师,Datawhale成员 文本分类是自然语言处理(NLP)最基础核心的任务,或者换句话说,几乎所有NLP任务都是「分类」任务,或者涉及到「分类」概念.比如分词.词性标注.命名 ...
- [CF/AT/Luogu]各大网站网赛 爆肝部部长工作报告文件Ⅱ
文章目录 CodeForces LATOKEN-Round-1(Div.1+Div.2) A. Colour the Flag B. Histogram Ugliness C. Little Alaw ...
- [CF/AT]各大网站网赛 体验部部长第一季度工作报告
文章目录 CodeForces #712 (Div. 1)--1503 A. Balance the Bits B. 3-Coloring C. Travelling Salesman Problem ...
- RazorExtensions Templated Razor Delegates
原文发布时间为:2011-04-27 -- 来源于本人的百度文章 [由搬家工具导入] Templated Razor Delegates David Fowler turned me on to a ...
最新文章
- Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
- Hadoop生态系统的详细介绍
- λ演算的语法和语义_λ和副作用
- 软硬兼备 学做CIO
- c语言程序设计平时作业代刷,C语言程序设计——小学生口算刷题系统
- 信息学奥赛一本通 1956:【11NOIP普及组】表达式的值 | 洛谷 P1310 [NOIP2011 普及组] 表达式的值
- BindFlags的作用
- react-native-router-flux 页面跳转与传值
- 搜索引擎的基本工作原理
- java游戏繁体字名字_游戏繁体字名字
- 正则表达式与自动机c语言,用有限自动机实现正则表达式的匹配
- 018 EPLAN 宏部件库 西门子 欧姆龙 三菱PLC窗口宏ema正泰edz数据 mdb(94G)
- signature=0805b6a4f11b6551d9a746082990b689,Derived certificate based on changing identity
- intent传递集合数据
- LeetCode 0883「三维形体投影面积」
- js如何实现随机数切换
- tools1.0.1
- open source 3d map_3D视觉技术在机器人抓取作业中的应用实例
- 杂七杂八 | Disco Diffusion
- 网闸的设计原理与误区
热门文章
- mac 管理 android手机助手,Mac 篇十二:Mac如何更高效的管理安卓手机和iPhone,老机器也可用哦...
- 【DPD数字预失真】射频功放的Volterra级数数字预失真系统开发
- 互联网快讯:“20220222”扎堆领证;极米多款产品获消费者肯定;星巴克两门店使用过期食材被罚
- RTX3060(30系显卡)Windows10部署Pytorch深度学习环境步骤与心得
- iOS最新面试题(一)
- 腾讯自选股如何实现单位小时内完成千万级数据运算
- 正式入职开发工程师工作近半年有感
- 【2020新书推荐】程序员值得一读的机器学习新书
- 常用工具:用yEd工具画流程图实用步骤
- 联想电脑尺寸在哪里看_如何检查联想电脑型号【详细介绍】