题目 给定方程 X1+X2+. +Xn=M 我们对第l..N1个变量进行一些限制: Xl < = A X2 < = A2 Xn1 < = An1 我们对第n1 + 1..n1+n2个变量进行一些限制: Xn1+l > = An1+1 Xn1+2 > = An1+2 Xnl+n2 > = Anl+n2 求:在满足这些限制的前提下,该方程正整数解的个数. 答案可能很大,请输出对p取模后的答案,也即答案除以p的余数. 输入格式 输入含有多组数据,第一行两个正整数T,p.T表示…
题意:给定方程x1+x2+....xn=m,每个x是正整数.但是对前n1个数做了限制x1<=a1,x2<=a2...xn1<=an1,同时对第n1+1到n1+n2个数也做了限制xn1+1>=an1+1....xn1+n2>=an1+n2,输出方程解个数. 解法:首先如果对数字没有任何要求(应该是只要求是非负数)的话,答案就是C(n+m+1,m+1)原理是隔板法.但是此题有各种限制,我们想办法解决限制使得答案往无限制上面靠. 首先是解决要正整数,那么每个数字减一即可,就是m-=…
题面 传送门 题解 为啥全世界除了我都会\(exLucas\)啊--然而我连中国剩余定理都不会orz 不知道\(exLucas\)是什么的可以去看看yx巨巨的这篇博客->这里 好了现在我们就解决了计算组合数的问题了,接下来问题就在于怎么计算了 首先如果是强制大于等于很简单,设条件分别为\(x_i\geq A_i\),那么方案数就是\({m-\sum(A_i-1)-1\choose n-1}\),用隔板法就能证明 然而现在前面一部分是小于等于,这好办,我们把它化成\(x_i\geq A_i+1\)…
没有限制的话算一个组合数就好了.对于不小于某个数的限制可以直接减掉,而不大于某个数的限制很容易想到容斥,枚举哪些超过限制即可. 一般情况下n.m.p都是1e9级别的组合数没办法算.不过可以发现模数已经被给出,并且这些模数的最大质因子幂都不是很大,那么扩展lucas就可以了. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring>…
3129: [Sdoi2013]方程 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 582  Solved: 338[Submit][Status][Discuss] Description 给定方程    X1+X2+. +Xn=M我们对第l..N1个变量进行一些限制:Xl < = AX2 < = A2Xn1 < = An1我们对第n1 + 1..n1+n2个变量进行一些限制:Xn1+l > = An1+1Xn1+2 > =…
http://www.lydsy.com/JudgeOnline/problem.php?id=3129 如果没有Ai的限制,就是隔板法,C(m-1,n-1) >=Ai 的限制:m减去Ai <=Ai 的限制:容斥原理,总数- 至少有一个数>Ai + 至少有两个数>Ai - …… 计算组合数取模,模数虽然很大也不是质数,但是质因数分解后 最大的才 10201,所以用扩展卢卡斯即可 注意在用扩展卢卡斯计算 阶乘的时候,要预处理 不包含当前质因子的阶乘,否则会TLE 3个点 #inclu…
拓展Lucas+容斥原理 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #include<vector> #include<cmath> #include<queue> #define MAXN 10000+10 #define INF 0x7f7f7f7f #define LINF 0x7f7f7f7f7f7f7f7f #…
BZOJ_3129_[Sdoi2013]方程_组合数学+容斥原理 Description 给定方程     X1+X2+. +Xn=M 我们对第l..N1个变量进行一些限制: Xl < = A X2 < = A2 Xn1 < = An1 我们对第n1 + 1..n1+n2个变量进行一些限制: Xn1+l > = An1+1 Xn1+2 > = An1+2 Xnl+n2 > = Anl+n2 求:在满足这些限制的前提下,该方程正整数解的个数. 答案可能很大,请输出对p取模…
[BZOJ3129][SDOI2013]方程(容斥,拓展卢卡斯定理) 题面 BZOJ 洛谷 题解 因为答案是正整数,所先给每个位置都放一个就行了,然后\(A\)都要减一. 大于的限制和没有的区别不大,提前给他\(A_i\)个就好了. 假如没有小于的限制的话,那么就是经典的隔板法直接算答案. 如果提前给完之后,还剩\(M\)个球,要放进\(n\)个盒子,答案就是\(\displaystyle{M+n-1\choose n-1}\) 然而有一个小于的限制很烦人.发现数量很少,那么直接爆枚子集,强制一…
再次感谢zyf2000超强的讲解. 扩展CRT其实就是爆推式子,然后一路合并,只是最后一个式子上我有点小疑惑,但整体还算好理解. #include<iostream> #include<cstdio> #include<queue> #include<map> #include<algorithm> #include<vector> #include<bitset> #include<set> #include…