题意:在0~n-1个数里选m个数和为k,数字可以重复选;

    如果是在m个xi>0的情况下就相当于是将k个球分割成m块,那么很明显就是隔板法插空,不能为0的条件限制下一共k-1个位置可以选择插入隔板,那么也就是说一共有C(k-1, m-1)种组合(m-1是因为要m块只要m-1个隔板);

  回到这题,我们要求的并不是m个xi>0、而是xi>=0,但是隔板之间又不能为空,最少也是1,那就让m块每块都有一个球就好了,这样最少为1个的隔板间也就相当于是0个;但是此时的隔板插空处就又增加了,那么此时就变为将m+k个球分割成m块的问题,一共k+m-1个空,也就是组合数量为C(k+m-1, m-1);

  这样我们就知道了在xi无限制的情况下的组合数量,但是xi很明显是有限制的,对于xi有0<=xi<n;假设有m块里有1个xi>=n的情况下,要让问题保持在xi是取自[0, n-1]的范围内,那么就让那m块里其中一块变成已经放了n个球的情况,那么我们就相当于求在k-n+m-1个位置里插上m-1个隔板的方案数C(k-1*n+m-1, m-1);但是这个一块有m个位置可以选,也就是包括刚刚插空的方案还要加上选择时的方案即一共C(m, 1)*C(k-1*n+m-1, m-1);然后我们枚举当C(m, i)的i位为0~m时的所有情况, 令(-1)^i为容斥系数。答案就是

下面给出代码加注释:

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+, INF=0x3f3f3f3f, mod=;///在这里k+m在最大值是2e5所以说保存阶乘和阶乘逆的数组要开2e5
void ex_gcd(ll a, ll b, ll &d, ll &x, ll &y){
if (!b) {d = a, x = , y = ;}
else{
ex_gcd(b, a % b, d, y, x);
y -= x * (a / b);
}
}
ll Inv(ll a, ll p){
ll d, x, y;
ex_gcd(a, p, d, x, y);
return d == ? (x % p + p) % p : -;
}
ll inv[N]={, };///保存i!的逆元
ll sum[N]={, };///保存i!
ll getC(int n, int m){///得到C(n, m)
if(n<m||m<){///如果不满足这些的情况是根本没有方案数的
return ;
}
return ((sum[n]*inv[m])%mod)*inv[n-m]%mod;
}
int main( ){
register int i, n, m, k, T;
register ll l, ans;
for(l=; l<N; ++l){
sum[l]=(sum[l-]*l)%mod;
inv[l]=Inv(sum[l], mod);
}
scanf("%d", &T);
while(T--){
ans=;
scanf("%d%d%d", &n, &m, &k);
for(i=; i*n<=k; ++i){
if(i&){
ans=((ans-getC(m, i)*getC(k-i*n+m-, m-)%mod)%mod+mod)%mod;///斥
}else{
ans=(ans+getC(m, i)*getC(k-i*n+m-, m-)%mod)%mod;///容
}
}
printf("%lld\n", ans);
}
}

拙略的代码

多校 HDU 6397 Character Encoding (容斥)的更多相关文章

  1. HDU 6397(2018多校第8场1001) Character Encoding 容斥

    听了杜教的直播后知道了怎么做,有两种方法,一种构造函数(现在太菜了,听不懂,以后再补),一种容斥原理. 知识补充1:若x1,x2,.....xn均大于等于0,则x1+x2+...+xn=k的方案数是C ...

  2. HDU 6397 Character Encoding (组合数学 + 容斥)

    题意: 析:首先很容易可以看出来使用FFT是能够做的,但是时间上一定会TLE的,可以使用公式化简,最后能够化简到最简单的模式. 其实考虑使用组合数学,如果这个 xi 没有限制,那么就是求 x1 + x ...

  3. hdu 6397 Character Encoding (生成函数)

    Problem Description In computer science, a character is a letter, a digit, a punctuation mark or som ...

  4. HDU - 6397 Character Encoding 2018 Multi-University Training Contest 8 (容斥原理)

    题意:问有多少种不重复的m个数,值在[0,n-1]范围内且和为k. 分析:当k<=n-1时,肯定不会有盒子超过n,结果是C(m+k-1,k):当k>m*(n-1)时,结果是0. 剩下的情况 ...

  5. 2017ACM暑期多校联合训练 - Team 8 1011 HDU 6143 Killer Names (容斥+排列组合,dp+整数快速幂)

    题目链接 Problem Description Galen Marek, codenamed Starkiller, was a male Human apprentice of the Sith ...

  6. HDU 5768Lucky7(多校第四场)容斥+中国剩余定理(扩展欧几里德求逆元的)+快速乘法

    地址:http://acm.hdu.edu.cn/showproblem.php?pid=5768 Lucky7 Time Limit: 2000/1000 MS (Java/Others)    M ...

  7. 2017ACM暑期多校联合训练 - Team 2 1009 HDU 60563 TrickGCD (容斥公式)

    题目链接 Problem Description You are given an array A , and Zhu wants to know there are how many differe ...

  8. C - Visible Trees HDU - 2841 -莫比乌斯函数-容斥

    C - Visible Trees HDU - 2841 思路 :被挡住的那些点(x , y)肯定是 x 与 y不互质.能够由其他坐标的倍数表示,所以就转化成了求那些点 x,y互质 也就是在 1 - ...

  9. HDU 5297 Y sequence 容斥 迭代

    Y sequence 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5297 Description Yellowstar likes integer ...

随机推荐

  1. onMeasure实例分析

    本文转自:http://blog.csdn.net/u012604322/article/details/17097105           上面这个两个视图是Android API中没有给出来的但 ...

  2. 半夜思考之查漏补缺, Spring 中的容器后处理器

    之前学 Spring 的时候 , 还没听过容器后处理器 , 但是一旦写出来 , 就会觉得似曾相识 . 容器配置器通常用于对 Spring 容器进行处理 , 并且总是在容器实例化任何其他 Bean 之前 ...

  3. 使用flex布局调换两个按钮的位置

    组件用的时antd的Modal组件,里面的按钮需要调换一下位置 今天发现用flex布局非常方便,代码如下: display: flex; justify-content: center; flex-f ...

  4. (很难啊)如何实时获取DBGrid 中当前单元格输入的内容? [问题点数:100分,结帖人yifawu100]

    如何获取DBGrid 中当前单元格输入的内容? 还没输入完成,我想实时获取 Cell中的内容,以便作其他处理,用什么事件呢? 所以Field的Onchange事件是没用的. DBGrid1.Selec ...

  5. MySQL-常见数据拆分办法

    在生产环境中,由于业务的增长或者业务的拆分,DBA经常需要拆库操作.那么我们常见的拆库手段有哪些呢? 我这里提供几种解决办法: 1. 使用mysqldump 把表逻辑倒出,然后再source 到其它地 ...

  6. enginefuncs_t 结构体中的函数

    就是常见的 g_engfuncs 中的函数.AMXX 里就是 fakemeta 的 EngFunc_** // 这些函数由引擎提供给EXTDLL使用.mp.dll hl.dll ... typedef ...

  7. P4645 [COCI2006-2007 Contest#3] BICIKLI

    题意翻译 给定一个有向图,n个点,m条边.请问,1号点到2号点有多少条路径?如果有无限多条,输出inf,如果有限,输出答案模10^9的余数. 两点之间可能有重边,需要看成是不同的路径. 题目描述 A ...

  8. 【刷题】BZOJ 1901 Zju2112 Dynamic Rankings

    Description 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]--a[j]中第k小的数是 ...

  9. 使用IDEA远程部署tomcat和调试

    环境: CentOS 7 Tomcat 9.0.1 jdk-9.0.1 IntelliJ IDEA 2017.3 Tomcat中的配置 在catalina.sh文件中加入以下的配置 CATALINA_ ...

  10. BZOJ4727 [POI2017]Turysta 【竞赛图哈密顿路径/回路】

    题目链接 BZOJ4727 题解 前置芝士 1.竞赛图存在哈密顿路径 2.竞赛图存在哈密顿回路,当且仅当它是强联通的 所以我们将图缩点后,拓扑排序后一定是一条链,且之前的块内的点和之后块内的点的边一定 ...