https://atcoder.jp/contests/arc093/tasks/arc093_d

题解

先钦定\(1\)号站在第一个位置上,那么他第一轮要和\((2)\)打,第二轮要和\((3,4)\)打,第三轮和\((5,6,7,8)\)打。

那么这些区间的最小值不能是给出的数。

考虑容斥。

我们把所有限制位置从大到小排序,设\(dp[i][s]\)表示前\(i\)个数,\(S\)集合中的区间已经被覆盖了的方案数。

那么我们每做到一个数,考虑把它放到一个没有被占用的区间,那么这个区间还能放的数的个数就是\((1<<n)-s-a[i]\)。

最后我们发现无论1站在哪都是一样的,所以乘上\(2^n\)就行了。

代码

#include<bits/stdc++.h>
#define N 17
using namespace std;
typedef long long ll;
const int mod=1e9+7;
int n,m,a[N];
ll jie[1<<N],ni[1<<N],dp[N][1<<N];
int cnt[1<<N];
inline ll rd(){ll x=0;char c=getchar();bool f=0;while(!isdigit(c)){if(c=='-')f=1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}return f?-x:x;
}
inline void MOD(ll &x){x=x>=mod?x-mod:x;}
inline ll power(ll x,ll y){ll ans=1;while(y){if(y&1)ans=ans*x%mod;x=x*x%mod;y>>=1;}return ans;
}
inline ll C(int n,int m){return jie[n]*ni[m]%mod*ni[n-m]%mod;}
inline bool cmp(int a,int b){return a>b;}
int main(){n=rd();m=rd();for(int i=1;i<=m;++i)a[i]=rd();sort(a+1,a+m+1,cmp);int maxn=(1<<n);for(int i=1;i<=maxn;++i)cnt[i]=cnt[i-(i&-i)]+1;jie[0]=1;for(int i=1;i<=maxn;++i)jie[i]=jie[i-1]*i%mod;ni[maxn]=power(jie[maxn],mod-2);for(int i=maxn-1;i>=0;--i)ni[i]=ni[i+1]*(i+1)%mod;dp[0][0]=1;for(int i=1;i<=m;++i)for(int s=0;s<(1<<n);++s)if(dp[i-1][s]){MOD(dp[i][s]+=dp[i-1][s]);for(int j=0;j<n;++j)if(!(s&(1<<j))){MOD(dp[i][s|(1<<j)]+=dp[i-1][s]*jie[1<<j]%mod*C(maxn-a[i]-s,(1<<j)-1)%mod);}}ll ans=0;for(int s=0;s<(1<<n);++s){if(cnt[s]&1)MOD(ans=ans-dp[m][s]*jie[maxn-1-s]%mod+mod);else MOD(ans=ans+dp[m][s]*jie[maxn-1-s]%mod);}printf("%lld\n",ans*maxn%mod);return 0;
}

转载于:https://www.cnblogs.com/ZH-comld/p/11021539.html

ARC093 F - Dark Horse相关推荐

  1. Atcoder 乱做

    最近感觉自己思维僵化,啥都不会做了-- ARC103 F Distance Sums 题意 给定第 \(i\) 个点到所有点的距离和 \(D_i\) ,要求构造一棵合法的树.满足第 \(i\) 个点到 ...

  2. 足球相关的英文专业术语(持续更新中...Ctrl+F可直接进行搜索)

    技术 long pass 长传 close pass, short pass 短传 flank pass 边线传球 high lobbing pass 高吊传球 scissor pass 交叉传球 v ...

  3. php判断数组不重复的元素,php从数组中随机选择若干不重复元素

    php从数组中随机选择若干唯一元素 /* * $array = the array to be filtered * $total = the maximum number of items to r ...

  4. 「版权流氓」终结者:6天时间,堆出687亿段旋律

    萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 世界上所有的音乐,都在这个网站里了. 准确地说,是一个八度内,所有音符的组合方法. 两个程序员Riehl和Rubin,用6天时间,以每秒30 ...

  5. 五道java小题,补更四道java小题

    一:分析以下需求,并用代码实现     1.定义List集合,存入多个字符串     2.删除集合中字符串"def"     3.然后利用迭代器遍历集合元素并输出 1 import ...

  6. 【NLP】从整体视角了解情感分析、文本分类!

    作者:太子长琴,算法工程师,Datawhale成员 文本分类是自然语言处理(NLP)最基础核心的任务,或者换句话说,几乎所有NLP任务都是「分类」任务,或者涉及到「分类」概念.比如分词.词性标注.命名 ...

  7. RazorExtensions Templated Razor Delegates

    原文发布时间为:2011-04-27 -- 来源于本人的百度文章 [由搬家工具导入] Templated Razor Delegates David Fowler turned me on to a ...

  8. Java面向对象题库

    编码.解码 将字符串String str1="天佑中华",以utf-8编码,然后用gbk解码,打印出来 将字符串String str2="大好河山",以utf- ...

  9. Python爬取全球是最大的电影数据库网站IMDb数据

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 作者 Dark Horse 前言 在使用 Python 开发爬虫的过程中,requests 和 B ...

  10. [转]体育运动比赛英语

    Tennis 网球 Athletics 竞技 Swimming 游泳 Individual Sports 体育项目 Football 足球 Games and Competitions 球类运动 Ba ...

最新文章

  1. 白话JAVA守护线程
  2. boost::regex
  3. 浏览器要是能这么做就好了
  4. java: 程序包lombok不存在_Java开发神器:Lombok 学习指南
  5. c#之using关键字
  6. SpringCloud创建Eureka Client服务注册
  7. uni-app开发规范
  8. openSSH服务及其应用
  9. 【口语语言理解】新分类!全总结!最新Awesome-SLU-Survey资源库开源!
  10. i3wm nm-applet每次开机都要输入wifi密码的解决办法
  11. CAD图纸转换成高质量的彩色PDF格式如何操作?
  12. ASO关键词排名的三种优化方式,aso关键词排名优化是
  13. 笔记本计算机怎么进入安全模式启动,笔记本怎么进入安全模式 【使用步骤】...
  14. jq html转为图片,使用jquery将彩色图片转换为黑白图片
  15. python 子域名爆破工具
  16. 贵有恒,何必三更起五更睡;最无益,只怕一日曝十日寒。
  17. 思科计算机基础知识,思科路由器基础知识--存储详解
  18. GitHub-demo:Image-Stitching
  19. Java互联网架构-企业级实战秒杀系统优化方案与应用思路
  20. CGB2107-Day03-mybatis

热门文章

  1. Intellij IDEA与Eclipse对比
  2. windows 无法停止ics_Win10系统ICS服务启动后停止怎么办
  3. 目前流行的数据分析软件有哪些?
  4. 中国高校外语慕课平台职场英语期末考试答案
  5. Flurry analytics SDK集成步骤及功能简介
  6. Linux系统的应用软件流程图绘制软件yEd
  7. Google Guava EventBus 消息发布-订阅异步调用使用
  8. AI识别彻底懵逼!这到底是「牛」还是「鲨」?
  9. html标签-meta
  10. C语言统考试卷一及答案,2017年《计算机应用基础》统考试题及答案