bzoj 4737: 组合数问题】的更多相关文章

Description 组合数C(n,m)表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3)三个物品中选择两个物品可以有( 1,2),(1,3),(2,3)这三种选择方法.根据组合数的定义,我们可以给出计算组合数C(n,m)的一般公式: C(n,m)=n!/m!*(n?m)! 其中n!=1×2×?×n.(额外的,当n=0时,n!=1) 小葱想知道如果给定n,m和k,对于所有的0≤i≤n,0≤j≤min(i,m)有多少对(i,j)满足C(i,j)是k的倍数. Input 第一行有…
Link: 传送门 Solution: 组合数的式子都可以先想想能不能递推,写出来就是: $\sum C_{n*k}^{i*k+r}=\sum C_{n*k-1}^{i*k+r}+\sum C_{n*k-1}^{i*k+r-1}$ 如果将每个求和看成一个整体,设$dp[n][r]=\sum C_{n}^{i*k+r}$, 则有$dp[n][r]=dp[n-1][r]+dp[n-1][(r-1+k)modk]$ 由于$r$就相当于余数因此0-1后要变为$k-1$! 这样的递推式明显可以矩乘,直接上…
思路: 预处理错排 然后C(n,m)*s[n-m-1]就是答案了 特判n-m-1<0 //By SiriusRen #include <cstdio> using namespace std; #define int long long ,N=; int cases,n,m,fac[N],s[N]; int pow(int x,int y){ ; while(y){ )res=res*x%mod; x=x*x%mod,y>>=; }return res; } )%mod*po…
题面 传送门:UOJ Solution 这题的数位DP好蛋疼啊qwq 好吧,我们说回正题. 首先,我们先回忆一下LUCAS定理: \(C_n^m \equiv C_{n/p}^{m/p} \times C_{n\%p}^{m\%p} (\%p)\) 我们仔细观察这个定理,就可以发现一个事实:LUCAS定理本质上是在对n,m两个数做K进制下的数位分离 所以说,LUCAS定理我们可以这样表示: \(C_n^m \equiv \prod C_{a_i}^{b_i}\) (ai与bi为K进制拆分后的两个…
ans=1000*4 分别固定千位,百位,十位,个位为1,其余位置随便排 对于每一个质因数的n次方,共有n+1中选择方法,即这个质因数的0~n次方 故共有   4*3*5=60  种方法 (1)取两册文字不同的书的方案=取日文英文+取日文中文+取英文中文 5*7+5*10+7*10 (2)相同的:取日文日文,取中文中文,取英文英文 5*4/2+7*6/2+10*9/2 (3)     (1)+(2) PS:高中课本上写的是 A(然鹅这并不对) 而不是 P 考虑两面旗帜的方法和三盆花的方法,根据乘…
题目链接:BZOJ - 3129 题目分析 使用隔板法的思想,如果没有任何限制条件,那么方案数就是 C(m - 1, n - 1). 如果有一个限制条件是 xi >= Ai ,那么我们就可以将 m 减去 Ai - 1 ,相当于将这一部分固定分给 xi,就转化为无限制的情况了. 如果有一些限制条件是 xi <= Ai 呢?直接来求就不行了,但是注意到这样的限制不超过 8 个,我们可以使用容斥原理来求. 考虑容斥:考虑哪些限制条件被违反了,也就是说,有哪些限制为 xi <= Ai 却是 xi…
1856: [Scoi2010]字符串 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1194  Solved: 651[Submit][Status][Discuss] Description lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgww想要知道满足要求的字符串共有多少个,聪明的程序员们,你们能帮助他吗? Input…
4870: [Shoi2017]组合数问题 题意:求 \[ \sum_{i=0}^{n-1} \binom{nk}{ik+r} \mod p \] \(n \le 10^9, 0\le r < k \le 50\) 组合数推了一下,有一些有趣的性质但是并不好做 想到了从意义方面考虑,但是没有深入,去看了题解 n大k小,一副矩乘的样子 就是求"n个物品取模k余r个的方案数" 因为取的个数模k,变得很有意思,可以把组合数的递推式矩乘了... #include <iostream…
题意 给定一棵 \(n\) 个点的树和一个常数 \(k\) , 对于每个 \(i\) , 求 \[\displaystyle S(i) = \sum _{j=1} ^ {n} \mathrm{dist}(i, j)^k\] \(n ≤ 50000, k ≤ 150\) 题解 先划划那个 \(S(i)\) 的式子 我们需要知道一个化 \(x^n(n \ge 0)\) 的东西qwq \[\displaystyle x^n=\sum_{k=0}^{n}\begin{Bmatrix} n \\ k \e…
http://www.lydsy.com/JudgeOnline/problem.php?id=4870 80分暴力打的好爽 \(^o^)/~ 预处理杨辉三角 令m=n*k 要求满足m&x==x ,x<=m, x%k==r 的x的个数 结论:若n&m==m,则C(n,m)为奇数,否则为偶数 枚举m的子集,判断是否%k==r 时间复杂度:O(m的位子集个数),即O(2^(m的二进制中1的个数))极限是O(n*k) 杨辉三角第i行的和=2^i,即 那么用2^(nk) 减去 前面不用的C…
题意:求解—— $$(C^{r}_{nk}+C^{r+k}_{nk}+C^{r+2k}_{nk}+...+C^{r+(n-1)k}_{nk}+...)mod(P)$$ 其中$C^{m}_{n}$表示从n中选m个的方案数 保证$1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^{30} − 1$ http://www.lydsy.com/JudgeOnline/problem.php?id=4870 一看r,k很小就很自然地想到矩阵快速幂: 然后枚举nk 一开始打算横…
http://www.lydsy.com/JudgeOnline/problem.php?id=3656 大意:经过一通推导,问题变成求\[\binom N M \mod P\],其中N,M<=1e9, P<=1e5,P可以是合数. 参考这位神犇的博客:http://blog.csdn.net/braketbn/article/details/50752153 作为一个蒟蒻,稍微写一点自己的理解... 如果P是素数,我们可以用lucas定理直接解决,那么P是合数应该怎么办呢? 首先,考虑把P分…
好题. 首先发现$p$是互质的数. 然后我们要求$\sum_{i=1}^{k} pi*xi=n$的方案数. 然后由于$p$不相同,可以而$S$比较小,都是$S$的质因数 可以考虑围绕$S$进行动态规划. 然后发现有时候许多情况是多余的.因为一整个$S$只能由一些相同的$p$组合而成. 所以这些部分可以用组合数计算,剩下的部分可以用背包处理出来. 需要滚动数组,而且需要前缀和转移. #include <cmath> #include <cstdio> #include <cst…
求(0,0)->(n,m)且在直线y=x下方(可以在y=x上)的方案数...同 http://www.cnblogs.com/JSZX11556/p/4908648.html ------------------------------------------------------------------ #include<cstdio> #include<cstring> #include<algorithm>   using namespace std;  …
(0,0)->(n,m)方案数为C(n,n+m), 然后减去不合法的方案. 作(n,m)关于y=x+1的对称点(m-1,n+1), 则(0,0)->(m-1,n+1)的任意一条路径都对应(0,0)->(n,m)的一条不合法路径(y>x). 所以答案就是C(n,n+m) - C(n+1,n+m).高精度算就OK了 ----------------------------------------------------------------- #include<cstdio&g…
先n++, m++ 显然答案就是C(3, n*m) - m*C(3, n) - n*C(3, m) - cnt. 表示在全部点中选出3个的方案减去不合法的, 同一行/列的不合法方案很好求, 对角线的不合法方案cnt比较麻烦. 枚举对角线(左下-右上), 即(0, 0)-(x, y), 我们发现这种情况有(n-y)*(m-x)*2(算上左上-右下的)种, 然后中间有gcd(x, y)-1个点(不合法), 乘起来就好了. ---------------------------------------…
传送门 题意: 给你平面上两个向量,走到指定点,一些点不能经过,求方案数 煞笔提一开始被题面带偏了一直郁闷为什么方案不是无限 现在精简的题意.....不就是$bzoj3782$原题嘛,还不需要$Lucas$了.... 因为这是平面向量啊 基本定理与唯一表示..... 小新上课强调了辣么多次...... #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> u…
Description Solution 考虑这个式子的组合意义: 从 \(n*k\) 个球中取若干个球,使得球的数量 \(\%k=r\) 的方案数 可以转化为 \(DP\) 模型,设 \(f[i][j]\) 表示前 \(i\) 个步,取得球的数量 \(\%k=j\) 的方案数 \(f[i][j]=f[i-1][j]+f[i-1][j-1]\) 发现这个东西就是杨辉三角(胡话,此题无关) 这样就可以做 \(O(k^3log)\) 了,并且可以过了 网上还有一种做法: 设 \(f[i*2][a+b…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2425 题意: 给你一个数字n,长度不超过50. 你可以将这个数字: (1)去掉若干个0 (2)打乱后重新排列 问你可以产生多少个小于n的数字. 题解: 题目中的第一个操作其实是没有用的. 去掉若干个0之后再重新排列(不允许前导0),和不去0直接重新排列(允许前导0),其实是等价的. 所以按照数位dp的方法从高到低按位统计. 如n = 2345时,分别统计前缀为0~1, 20~22, 23…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4591 先说说自己的想法: 从组合意义的角度考虑,从n个里选<=k个,就添加k个空位置,变成从n+k个里选k个. 其实是错的.因为选空位置的方案数重复了. 于是https://blog.csdn.net/neither_nor/article/details/51684410 其实就是写出∑C的式子,把C用lucas定理表示,发现有一堆 i%mod 相等的东西: 把它们提出来,用乘法可以加速…
注意到$r<k$ 别问我为什么要强调. 考场上前30分水水. 然后写阶乘的时候大力$n\log {n}$预处理 本机跑的挺快的,然后稳稳的T掉了. 然后就是简单的矩阵乘法了. #include <map> #include <cmath> #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm…
设n>m,答案是\( C_n^m \),然后高精就行了 具体做法是先把指数筛出来,然后对每个数因数分解,记录质因子个数,最后被除数减去除数质因子个数,把剩下的质因子乘起来就行了 #include<iostream> #include<cstdio> using namespace std; const int N=1000005; int n,m,q[N],p[N],tot,c[N]; struct gj { int a[55]; gj operator * (const i…
题目大意:给你n个1和m个0,你要用这些数字组成一个长度为n+m的串,对于任意一个位置k,要保证前k个数字中1的数量大于等于0的数量,求所有合法的串的数量 答案转化为所有方案数-不合法方案数 所有方案数显然是 现在比较易懂的解法是转化进坐标系 从(0,0)开始,填1视为向右上↗走,填0视为向右下↘走,如果路径经过了y=-1这条直线,说明不合法 把一个经过y=-1的路径的左半部分(即在路径和y=-1交点之前的那部分路径)关于y=-1翻转 因为是从(0,0)出发,现在变成了从(0,-2)出发,求方案…
Code: #include <cstdio> #include <cstring> #include <algorithm> #define setIO(s) freopen(s".in","r",stdin) #define N 60 #define ll long long #define mod p using namespace std; int k,r; long long n,p; struct matrix{ lo…
bzoj 3856: Monster 虽然是sb题,,但是要注意h可能<=a,,,开始忘记判了WA得很开心. #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; long long h, a, b, k; int main(){ ; while(scanf(&qu…
传送门:BZOJ 2038 题意很明确,是在给定的区间内任意选取两个数,求选到两个相同的数的概率. 所以我们得首先统计在给定的区间内,相同的数对有多少对,那么这里就使用到了莫队算法.如果对莫队算法还不够了解,请百度一下,会有比较详细的解释,(虽然有一些也在瞎扯蛋),然后套模版就行了.其次这道题还需要用到一点组合数学知识,即C(n,r)=n!/[r! * (n-r)!].设每次询问的区间长度为l,那么我们可以很快的计算出从l个数中任取两个的组合数为C(l,2)=l*(l-1)/2,套用公式即可.题…
本蒟蒻第一次没看题解A的题竟然是省选$Round1$ $Day2$ $T2$ 这道组合数学题. 考试时一开始以为是莫队,后来想到自己不会组合数的一些公式,便弃疗了去做第三题,,, 做完第三题后再回来看这道题,想到暴力算$组合数×错排$,我记得有一天晚上$Snayvals$问过我错排公式怎么推,但我并没有在意!!!幸亏我知道错排可以线性推出来,便开始用笔推错排公式.推了$30min$发现有计算机为什么不用!!!便打了一个表,很快就找出了规律$f[i]=(f[i-1]*f[i-2])*(i-1)$…
Prufer序列+组合数学 嗯哼~给定每个点的度数!求树的种数!那么很自然的就想到是用prufer序列啦~(不知道prufer序列的……自己再找找资料吧,这里就不放了,可以去做一下BZOJ1005明明的烦恼) 那么我们令每个点的度数v[i]-1,得到每个节点在prufer序中的出现次数! 现在就是求这个prufer序有多少种了……有两种做法: 1.多重集排列数:n个元素,每种元素有a[i]个,求全排列的方案数,自己随便yy一下就可以得到$$ans=\frac{n!}{\prod (a[i]!)}…
Catalan数/组合数取模 Aha!这题我突然灵光一现就想到Catalan数……就是按顺序安排1~2n这些数(以满足前两个条件)……分配到奇数位置上的必须比偶数位置上的多(要不就不满足第三个条件了) Catalan数可以用C(n,2n)/(n+1)直接求 但是这题P不保证是质数感觉很捉急啊= =不会捉啊……然后我也没想到50分的DP,果断滚粗了啊sad QAQ Orz zyf & 盾爷,搬运题解: 假设现在我对于数字 i ,要把他的 j 次方加到答案中去,若k是 i 的一个质因子,那么我只要把…
数位DP 同上一题Windy数 预处理求个组合数 然后同样的方法,这次是记录一下0和1的个数然后搞搞 Orz cxlove /************************************************************** Problem: 1662 User: Tunix Language: C++ Result: Accepted Time:0 ms Memory:1280 kb ******************************************…