ARC093 F Dark Horse——容斥
题目:https://atcoder.jp/contests/arc093/tasks/arc093_d
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=,M=(<<)+,mod=1e9+;
int pw(int x,int k)
{int ret=;while(k){if(k&)ret=(ll)ret*x%mod;x=(ll)x*x%mod;k>>=;}return ret;} int n,m,a[N],jc[M],jcn[M],bin[N],f[N][M],ct[M];
bool cmp(int a,int b){return a>b?a:b;}
int C(int n,int m)
{
if(n<||m<||n<m)return ;
return (ll)jc[n]*jcn[m]%mod*jcn[n-m]%mod;
}
void init()
{
bin[]=;for(int i=;i<=;i++)bin[i]=bin[i-]<<;
int lm=bin[n];
jc[]=;for(int i=;i<=lm;i++)jc[i]=(ll)jc[i-]*i%mod;
jcn[lm]=pw(jc[lm],mod-);
for(int i=lm-;i>=;i--)jcn[i]=(ll)jcn[i+]*(i+)%mod;
for(int s=;s<bin[n];s++)
ct[s]=ct[s^(s&-s)]+;
for(int s=;s<bin[n];s++)ct[s]=(ct[s]&)?mod-:;
}
int main()
{
scanf("%d%d",&n,&m); init();
for(int i=;i<=m;i++)scanf("%d",&a[i]);
sort(a+,a+m+,cmp);
f[][]=; int lm=bin[n];
for(int i=;i<=m;i++)
for(int s=;s<bin[n];s++)
{
f[i][s]=f[i-][s];
for(int j=;j<n;j++)
if(s&bin[j])
{
int t=s^bin[j];
int ml=(ll)f[i-][t]*C(lm-a[i]-t,bin[j]-)%mod;
f[i][s]=(f[i][s]+(ll)ml*jc[bin[j]])%mod;
}
}
int ans=;
for(int s=,U=bin[n]-;s<bin[n];s++)
{
ans=(ans+(ll)ct[s]*f[m][s]%mod*jc[U^s])%mod;
}
printf("%lld\n",(ll)ans*lm%mod);
return ;
}
ARC093 F Dark Horse——容斥的更多相关文章
- ARC 093 F Dark Horse 容斥 状压dp 组合计数
LINK:Dark Horse 首先考虑1所在位置. 假设1所在位置在1号点 对于此时剩下的其他点的方案来说. 把1移到另外一个点 对于刚才的所有方案来说 相对位置不变是另外的方案. 可以得到 1在任 ...
- ARC093 F - Dark Horse
https://atcoder.jp/contests/arc093/tasks/arc093_d 题解 先钦定\(1\)号站在第一个位置上,那么他第一轮要和\((2)\)打,第二轮要和\((3,4) ...
- ARC093F Dark Horse 【容斥,状压dp】
题目链接:gfoj 神仙计数题. 可以转化为求\(p_1,p_2,\ldots,p_{2^n}\),使得\(b_i=\min\limits_{j=2^i+1}^{2^{i+1}}p_j\)都不属于\( ...
- 2015 asia xian regional F Color (容斥 + 组合数学)
2015 asia xian regional F Color (容斥 + 组合数学) 题目链接http://codeforces.com/gym/100548/attachments Descrip ...
- 广东工业大学2016校赛决赛-网络赛 1174 Problem F 我是好人4 容斥
Problem F: 我是好人4 Description 众所周知,我是好人!所以不会出太难的题,题意很简单 给你n个数,问你1000000000(含1e9)以内有多少个正整数不是这n个数任意一个的倍 ...
- codeforces 597div2 F. Daniel and Spring Cleaning(数位dp+二维容斥)
题目链接:https://codeforces.com/contest/1245/problem/F 题意:给定一个区间(L,R),a.b两个数都是属于区间内的数,求满足 a + b = a ^ b ...
- ACM-ICPC 2015 沈阳赛区现场赛 F. Frogs && HDU 5514(容斥)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5514 题意:有m个石子围成一圈, 有n只青蛙从跳石子, 都从0号石子开始, 每只能越过xi个石子.问所 ...
- 4.19 ABC F path pass i 容斥 树形dp
LINK:path pass i 原本想了一个点分治 yy了半天 发现重复的部分还是很难减掉 况且统计答案的时候有点ex. (点了别人的提交记录 发现dfs就过了 于是yy了一个容斥 发现可以直接减掉 ...
- 【arc093f】Dark Horse(容斥原理,动态规划,状态压缩)
[arc093f]Dark Horse(容斥原理,动态规划,状态压缩) 题面 atcoder 有 \(2^n\) 名选手,编号为 \(1\) 至 \(2^n\) .现在这 \(2^n\) 名选手将进行 ...
随机推荐
- Selenium WebDriver 常用API
public class Demo1 { WebDriver driver; @BeforeMethod public void visit(){ //webdriver对象的声明 System.se ...
- sysbench - 数据库功能及性能测试工具
sysbench 的 GitHub 参考资料 1.0 之后的版本使用方法跟之前的有所区别,下面所有内容基于 1.0.9 版本. 另外,为了方便管理测试,最好不要通过命令直接运行测试,而是写成脚本自动化 ...
- 第 11 章 python线程与多线程
一.什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程. 进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位. 多线程(即多 ...
- 文件上传: FileItem类、ServletFileUpload 类、DiskFileItemFactory类
文件上传: ServletFileUpload负责处理上传的文件数据,并将表单中每个输入项封装成一个FileItem对象中, 在使用ServletFileUpload对象解析请求时需要根据DiskFi ...
- Support Vector Machine(2):Lagrange Duality求解线性可分SVM的最佳边界
在上篇文章<Support Vector Machine(1):线性可分集的决策边界>中,我们最后得到,求SVM最佳Margin的问题,转化为了如下形式: 到这一步后,我个人又花了很长的时 ...
- [Linux] 018 关机重启命令
1. shutdown 命令 $ shutdown [选项] 时间 选项 -c 取消前一个关机wgwy -h 关机 -r 重启 2. 其他关机命令 $ halt $ poweroff $ init 0 ...
- instanceof 和isinstance的区别
class A {} class B extends A {} class C extends A {} public class Test { public static void main(Str ...
- telnet访问出现telnet:Unable to connect to remote host: No route to host
Linux下的防火墙默认是不允许telnet服务通过的,所以,当防火墙不允许telnet服务通过时就会出现上面的这种情况,可以将防火墙关闭或者勾选允许telnet服务即可解决如上的问题.
- [BZOJ2438]杀人游戏
Description 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面,查出谁是杀手.警察能够对每一个人 进行查证,假如查证的对象是平民,他会告诉警察,他认识的人, 谁是 ...
- [暑假集训Day1T2]北极通讯网络
这题主要考察对“卫星电话”的理解,k个卫星电话相当于可以让k个联通块保持联通,因此我们只需要让原图连成k个联通块,然后给每个联通块的任意一个节点发一部卫星电话即可.因此我们需要连n-k条边,特别地,当 ...