BZOJ 4710
枚举几个同学分到了
对于每种特产求一个方案数(经典做法)乘起来
然后容斥
- #include<bits/stdc++.h>
- using namespace std;
- #define rep(i,a,b) for(int i=(a),i##_end=(b);i<=i##_end;++i)
- #define For(i,a,b) for(int i=(a),i##_end=(b);i<i##_end;++i)
- #define per(i,a,b) for(int i=(b),i##_st=(a);i>=i##_st;--i)
- #define fi first
- #define se second
- #define pb push_back
- #define mp make_pair
- #define dbg(x) cerr<<#x" = "<<x<<endl
- #define debug(...) fprintf(stderr, __VA_ARGS__)
- #define Es(x,i) for(Edge *i=G[x];i;i=i->nxt)
- typedef long long ll;
- typedef pair<int,int> pii;
- const int inf=~0u>>1,mod=1e9+7;
- inline int rd() {
- int x,c,f=1;while(!isdigit(c=getchar()))f=c!='-';x=c-'0';
- while(isdigit(c=getchar()))x=x*10+c-'0';return f?x:-x;
- }
- inline int pw(int n,int m){int r=1;for(;m;m>>=1,n=(ll)n*n%mod)if(m&1)r=(ll)r*n%mod;return r;}
- const int N=1011,M=2*N;
- int fac[M],fai[M];
- inline void init(){
- fac[0]=1;
- For(i,1,M)fac[i]=(ll)fac[i-1]*i%mod;
- fai[M-1]=pw(fac[M-1],mod-2);
- per(i,1,M-1)fai[i-1]=(ll)fai[i]*i%mod;
- }
- inline int C(int n,int m){return n<m?0:(ll)fac[n]*fai[m]%mod*fai[n-m]%mod;}
- int m,n,a[N];
- inline int Cal(int n){
- int r=1;
- rep(i,1,m){
- r=(ll)r*C(a[i]+n-1,n-1)%mod;
- }
- return r;
- }
- int main(){
- #ifdef flukehn
- freopen("test.txt","r",stdin);
- #endif
- init();
- //while(cin>>n>>m)cout<<C(n,m)<<endl;
- n=rd(),m=rd();
- rep(i,1,m)a[i]=rd();
- ll ans=Cal(n);
- For(i,1,n)ans+=((n-i&1)?-1:1)*(ll)Cal(i)*C(n,i)%mod;
- ans=(ans%mod+mod)%mod;
- cout<<ans<<endl;
- }
BZOJ 4710的更多相关文章
- BZOJ 4710: [Jsoi2011]分特产 [容斥原理]
4710: [Jsoi2011]分特产 题意:m种物品分给n个同学,每个同学至少有一个物品,求方案数 对于每种物品是独立的,就是分成n组可以为空,然后可以用乘法原理合起来 容斥容斥 \[ 每个同学至少 ...
- ●BZOJ 4710 [Jsoi2011]分特产
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4710 题解: 容斥,组合先看看这个方案数的计算:把 M 个相同的东西分给 N 个人,每个人可 ...
- 【BZOJ 4710】 4710: [Jsoi2011]分特产 (容斥原理)
4710: [Jsoi2011]分特产 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 99 Solved: 65 Description JYY 带 ...
- BZOJ 4710 [Jsoi2011]分特产 解题报告
4710 [Jsoi2011]分特产 题意 给定\(n\)个集合,每个集合有相同的\(a_i\)个元素,不同的集合的元素不同.将所有的元素分给\(m\)个不同位置,要求每个位置至少有一个元素,求分配方 ...
- bzoj 4710: [Jsoi2011]分特产
Description JYY 带队参加了若干场ACM/ICPC 比赛,带回了许多土特产,要分给实验室的同学们. JYY 想知道,把这些特产分给N 个同学,一共有多少种不同的分法?当然,JYY 不希望 ...
- 【bzoj 4710】 [Jsoi2011]分特产
题目 容斥加组合计数 显然答案是 \[\sum_{i=0}^n(-1)^i\binom{n}{i}f_{n-i}\] \(f_i\)表示至多有\(i\)个人没有拿到特产 考虑求\(f\) 发现\(m\ ...
- bzoj 4710 分特产
有 $n$ 个人,$m$ 种物品,每种物品有 $a_i$ 个,求每个人至少分到一个的方案数 $n,m,a_i \leq 2000$ sol: 比上一个题简单一点 还是考虑容斥 每个人至少分到一个 = ...
- BZOJ 4710 容斥原理+dp
//By SiriusRen #include <cstdio> using namespace std; int n,m,a[1005]; typedef long long ll; l ...
- BZOJ 4710: [Jsoi2011]分特产(容斥)
传送门 解题思路 首先所有物品是一定要用完的,那么可以按照物品考虑,就是把每种物品分给\(n\)个人,每个人分得非负整数,可以用隔板法计算.设物品有\(m\)个,方案数为\(C(n+m-1,n-1)\ ...
随机推荐
- Zabbix 添加端口监控链接
zabbix 添加端口监控 连接数: zabbix 配置 添加 监控项: 其他检测 方式也是 示例: zabbix 客户端配置文件添加: 编辑 zabbix_agentd.conf 添加 端口 ...
- 《B2C商城》电商平台搭建流程分析
商城网站建设在当今互联网时代中是非常重要的.商城网站,是企业产品展示.品牌宣传与消费者互动交流的一个平台,利用好这样的一个平台,就能占得先机.那么问题来了,商城网站如何建设呢?这对于企业来说真的是一个 ...
- kai linux安装搜狗输入法以及更新源地址
需要去搜狗官网下载linux版的输入法,根据自己的系统选择多少位进行下载. 首先执行如下命令:dpkg -i 输入法包名,这时会报错,会报没有安装依赖包,这时需要执行apt-get install - ...
- spring基于XML的声明式事务控制
<?xml version="1.0" encoding="utf-8" ?><beans xmlns="http://www.sp ...
- C++自己实现一个String类
C++自己实现一个String类(构造函数.拷贝构造函数.析构函数和字符串赋值函数) #include <iostream> #include <cstring> using ...
- git知识总结-2.git基本操作之操作汇总
0.前言 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 上图分别为: Workspace:工作区 Index / Stage:暂存区 Reposito ...
- Linux禁止ping、开启ping设置
Linux默认是允许Ping响应的,系统是否允许Ping由2个因素决定的:A.内核参数,B.防火墙,需要2个因素同时允许才能允许Ping,2个因素有任意一个禁Ping就无法Ping. 具体的配置方法如 ...
- VMware使两台windows虚拟机能够互相ping通
1.关闭防火墙 cmd命令行里输入:netsh firewall set opmode disable 2.测试如果还不能ping通,就把网络类型选nat类型 3.测试:vmware网关默认是.2
- js &运算符什么意思,什么用处
“&&”连接两个表达式,当两侧表达式都为真时,返回TRUE.有一个为假则返回FALSE. 也就是说,符号前面的如果为true,就会执行符号后面的语句,如果符号前面的为false,那么后 ...
- mysql 与 oracle 的时间查询
关于时间区间查询 1.mysql select * from t_date a where date_format (a.delete_time,'%Y-%m-%d') <date_format ...