正解:$dp$

解题报告:

传送门$QwQ$

首先港下不合法的情况.设$sum_i$表示$q\geq i$的人数,当且仅当$sum_i>n-i+1$时无解.

欧克然后考虑这题咋做$QwQ$.

一般的想法是枚人然后考虑给他啥编号.但是发现这样好像不太可做,所以考虑换一种思考方式.

考虑设$f_{i,j}$表示对于没安排的有$j$个人编号小于等于$i$的方案数

然后考虑转移,发现就枚给多少个人编号$i$就成.于是转移就$f_{i,j}=\sum f_{i+1,k}\cdot C(n-m-k,j-k).$

嗷然后补一个点$kk$.

就因为那个$mod$没有限制所以不能预处理阶乘逆元地搞,但是因为$n$的范围很小所以可以直接预处理数组$C_{i,j}$

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define lf double
#define gc getchar()
#define t(i) edge[i].to
#define n(i) edge[i].nxt
#define w(i) edge[i].wei
#define ri register int
#define rb register bool
#define rc register char
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i)
#define e(i,x) for(ri i=head[x];~i;i=n(i)) const int N=300+10;
int n,m,mod,f[N][N],sum[N],jc[N],inv[N],C[N][N]; il int read()
{
rc ch=gc;ri x=0;rb y=1;
while(ch!='-' && (ch>'9' || ch<'0'))ch=gc;
if(ch=='-')ch=gc,y=0;
while(ch>='0' && ch<='9')x=(x<<1)+(x<<3)+(ch^'0'),ch=gc;
return y?x:-x;
}
il void ad(ri &x,ri y){x+=y;if(x>=mod)x-=mod;}
il void pre(){rp(i,0,n){C[i][0]=1;rp(j,1,i)C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;}}
il void solv()
{
memset(f,0,sizeof(f));memset(sum,0,sizeof(sum));
n=read();m=read();mod=read();pre();rp(i,1,m){read();++sum[read()];}
my(i,n,1){sum[i]+=sum[i+1];if(sum[i]>n-i+1){printf("NO\n");return;}}
f[n+1][0]=1;
my(i,n+1,1)
{
rp(j,0,n-sum[i]-i+1)
{
rp(k,0,min(j,n-sum[i+1]-(i+1)+1))
ad(f[i][j],1ll*f[i+1][k]*C[n-m-k][j-k]%mod);//,
//printf("f[%d][%d]+=f[%d][%d]*%d C[%d][%d]=%d\n",i,j,i+1,k,C[n-m-k][j-k],n-m-k,j-k,C[n-m-k][j-k]);
}
}
printf("YES %d\n",f[1][n-m]);
} int main()
{
freopen("2523.in","r",stdin);freopen("2523.out","w",stdout);
ri T=read();while(T--)solv();
return 0;
}

随机推荐

  1. @codeforces - 1056G@ Take Metro

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 环上有 n 个点,按顺时针顺序以 1 到 n 编号.其中 1~m ...

  2. 解决uploadify插件不同浏览器下的兼容性问题

    http://www.thinkphp.cn/code/2138.html uploadify在部分浏览器上没法使用,或者各种报错的解决方法.uploadify插件上传图片是很爽的体验. 如果用chr ...

  3. Android中使用Apache common ftp进行下载文件

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/birdsaction/article/details/36379201 在Android使用ftp下 ...

  4. 2019-2-2-VisualStudio-扩展开发-添加菜单

    title author date CreateTime categories VisualStudio 扩展开发 添加菜单 lindexi 2019-02-02 15:35:18 +0800 201 ...

  5. SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式

    数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运 ...

  6. LOJ6079「2017 山东一轮集训 Day7」养猫

    养ImmortalCO k可重区间问题 的增强版:有上下界! 直接都选择s[i],然后再把一些调整到e[i] 考虑通过最大流的“最大”,使得至少每k个有me个e, 通过最大流的“上界”,限制每k个最多 ...

  7. HZOJ 辣鸡(ljh)

    题解?noipT1还需要题解?正解就是$n^2$大暴力. 考试的时候打了$n^2$的暴力,也想到了正解的优化,然而觉得它太麻烦了,而且$n^2$怎么优化也过不了50000啊,而且即使不优化前面30分我 ...

  8. 读取hive的表结构,生成带comment的视图建表语句

    ### 读取hive的表结构,生成带comment的视图建表语句 # 读取配置文件中的表并进行遍历 grep -v '^#' tablesFile|while read tableName do st ...

  9. Handler用法总结

    一.线程通讯问题 1.1 Message.Handler.Looper 在Android中提供了一种异步回调机制Handler,我们可以它来完成一个很长时间的任务. Handler基本使用: 在主线程 ...

  10. (二)Centos7下Yum更新安装PHP5.5,5.6,7.0

    yum源默认的版本太低了,手动安装有一些麻烦,想采用Yum更新安装的可以使用下面的方案: 1.检查当前安装的PHP包 yum list installed | grep php 如果有安装的PHP包, ...