----组合数学
文章平均质量分 55
扩展的灰
扩展的灰(Extended Ash)
展开
-
容斥原理基本思想
基本原理:对于f(n),g(n)f(n),g(n)f(n),g(n)如果有以下关系g(i)=∑j=inf(j)∗C(j,i)g(i)=\sum_{j=i}^nf(j)*C(j,i)g(i)=j=i∑nf(j)∗C(j,i)而且存在系数F(n),G(n)F(n),G(n)F(n),G(n)满足F(n)=∑i=1nC(n,i)∗G(i)F(n)=\sum_{i=1}^nC(n,i)*G(i)F(n)=i=1∑nC(n,i)∗G(i)那么就可以得到结果∑i=1nf(i)∗F(i)=∑i=1ng(i)∗G(原创 2021-04-19 19:21:37 · 233 阅读 · 0 评论 -
Jzoj5622 table
p一道非常有意思的题目如果将第一行看做一个多项式,那么每过一行就是乘上了一个(a+bx)那么我们可以求出(a+bx)^p的逆,让后就可以求出第一行当然也可以有简单做法首先如果推下式子,很容易知道第p行到第x行的转移 (x>p)f[x][y]=∑f[p][y-i]*a^(x-p-i)*b^i*C(x-p,i) (0那么我们考虑一下怎么用第p行推出p行上面的东西我们可以原创 2018-04-20 20:31:00 · 248 阅读 · 0 评论 -
Jzoj5644 凫趋雀跃
经典套路容斥题直接dp做是O(TxTyRk)的可以60分满分做法又要用到经典的容斥法我们设f[i][x][y]表示走i步,走到x,y的方案(不考虑不合法向量)设g[i][x]表示走了i步不合法的向量,走到了(x,x)的方案数二项式反演得Answer=∑(-1)^i*C(R,i)*g[i][x]*f[R-i][Tx-x][Ty-x] 考虑f如何计算,因为x,y两维是独立的原创 2018-04-20 21:06:31 · 284 阅读 · 1 评论 -
51Nod1120 机器人走方格 V3
题目看这里一个数学题,答案就是卡特兰数*2求卡特兰数要用到组合数求法f[n]=C(2n-2,n-1)/n由于模数较小,可以Lucas定理直接做,但是这样是有问题的因为n不一定和模数互质,但是还是A了,数据比较水#pragma GCC opitmize("O3")#pragma G++ opitmize("O3")#include#include#include#def原创 2018-04-27 17:10:46 · 290 阅读 · 0 评论 -
51Nod1306 高楼和棋子
题目看这里 一个非常好的逆向思维题(都是套路233) 如果直接做发现其实可以做,但是数据范围太大不能过了,具体做法参考这里 开始正文: 首先,我们设f[i,j]表示f[i,j]表示f[i,j]表示在有i个棋子的情况下,扔j次能保证测出的楼层最高是多少,显然如果n可以被测出,那么n-1也可以被测出 于是考虑一下最优策略是什么 在高度h扔一个棋子下去,如果碎了,那么说明高度&...原创 2018-07-29 11:29:52 · 274 阅读 · 0 评论 -
状压DP十六连测
DP应该先学插头 状压DP十六连 A[寿司晚宴] 开始想到了反演,设f(d)f(d)f(d)表示两边选出来的公因数为d的方案数,设F(d)F(d)F(d)… 好的介绍一个套路,按照最大的质因子分类(没错这不是洲阁筛) 我们发现小于500−−−√500\sqrt{500}的质数只有8个,可以搞一个2162162^{16}的状态表示一种方案 让后,我们设T(x)T(x)T(x)表示x...原创 2018-08-28 09:33:27 · 408 阅读 · 0 评论 -
序列求和V2
.题目:计算∑i=1nri∗ik\sum_{i=1}^nr^i*i^ki=1∑nri∗ik其中n≤109,k≤103n\le10^9,k\le10^3n≤109,k≤103一个非常巧妙的转化,设S(x)=∑i=1nri∗ixS(x)=\sum_{i=1}^nr^i*i^xS(x)=i=1∑nri∗ix我们要求的就是S(k)S(k)S(k)考虑将式子变形S(k)=∑i=1nri∗ik...原创 2018-10-26 15:19:53 · 506 阅读 · 0 评论 -
伯努利数
.生成函数B(z)=zez−1=∑Bnznn!B(z)=\frac{z}{e^z-1}=\sum B_n\frac{z^n}{n!}B(z)=ez−1z=∑Bnn!zn递推式(n2n^2n2)B0=1B_0=1B0=1Bn=−∑k=0nBkn−k+1B_n=-\sum_{k=0}^n\frac{B_k}{n-k+1}Bn=−k=0∑nn−k+1Bk也可以写成这样∑k=0nC...原创 2018-10-24 18:32:58 · 719 阅读 · 0 评论 -
51Nod1680 区间求和
.题目点这里大概是这么一个问题∑k=1n∑i=1n−k+1∑j=i+k−1n区间前k大元素和\sum_{k=1}^n\sum_{i=1}^{n-k+1}\sum_{j=i+k-1}^n区间前k大元素和k=1∑ni=1∑n−k+1j=i+k−1∑n区间前k大元素和观察式子并加以变形=∑i=1n∑j=in∑k=1j−i+1区间前k大元素和=\sum_{i=1}^n\sum_{j=i}^n...原创 2018-11-02 21:29:37 · 308 阅读 · 0 评论 -
PKUSC2018部分题解
.LOJ的std+数据+当时讲题的记忆硬是刚了五道题(D1t3咕咕咕)稍微写一下题解LOJ6432 「PKUSC2018」真实排名一道比较简单的题,不过需要注意很多细节考虑排名不变的两种情况1.自己分数xxx不变,那么所有分数在[[x2],x)[[\frac{x}{2}],x)[[2x],x)中的其他人的分数也不能变,否则必然有在自己后面的人到自己前面2.自己分数xxx翻倍,那么...原创 2018-12-29 11:04:04 · 687 阅读 · 0 评论 -
LOJ 6495~6497「雅礼集训 2018 Day1」
.真是看懂std就秒的三道题,但是看懂就很难啊(感谢superguymj和memset0两个大佬的代码)稍微说一下题解-------------------------------------------------------- 「雅礼集训 2018 Day1」树这道题的正解被superguymj大佬吊打了,原来O(n⋅2n)O(n·2^n)O(n⋅2n)变成了O(n4)O(n^4)...原创 2019-01-04 08:47:08 · 1357 阅读 · 1 评论 -
51Nod1528 加号分配
题目看这里考虑单独计算每个位置的贡献一个位置i的贡献为c[i]*10^k当且仅当它后面连续(k-1)个数前都没有加号那么也就是确定了k个位置的情况,剩下的位置未知,用组合数计算即可注意到当k相同时很多位置的系数是一样的,可以前缀和降低复杂度至O(n)#pragma GCC opitmize("O3")#pragma G++ opitmize("O3")#include原创 2018-02-22 21:59:04 · 272 阅读 · 0 评论 -
51Nod1556 计算
题目看这里一个公式题,推不出来我们令f[i]表示当n=i时的总方案数,令g[i]表示n=i时,结尾恰为1的方案数那么显然,f[i]=3f[i-1]-g[i]只需要考虑计算g[i],这个东西是一个叫做默慈金数的东西递推式为g[n+1]=g[n]+Σg[i]*g[n-i-1]=((2n+3)*g[n]+3n*g[n-1])/(n+3)直接计算即可#pragma GCC原创 2018-02-22 21:21:28 · 259 阅读 · 0 评论 -
Jzoj3170 挑选玩具
ABC找到N个箱子,箱子里装着一些玩具,一共有M种玩具,编号从1到M,同一种玩具可能出现在多个箱子里。ABC决定从中选择一些箱子,把这些箱子中的玩具聚集到一起,必须保证每种玩具至少出现一次。问ABC一共有多少种选择方案 (1第三次看到这个题了,前两次都忘了怎么做了。。。好的第一眼看上去可以dp做,结果发现只能过50%数据矩阵明显不可做,让后开始考虑数学方法考虑容斥原理,原创 2018-01-03 19:32:05 · 598 阅读 · 0 评论 -
Jzoj5418 合影
题目背景 热烈庆祝北京师范大学附属实验中学成立100周年!问题描述 经过一天的忙碌,志愿者们结束了他们的工作,准备站在一排合影留念。 现在总共有n名志愿者留下来准备合影。不过,进程并不是那么顺利,有些同学提出了一些奇奇怪怪的要求(每个人最多只会提出一个):他必须站在另外一个同学的左边(不一定相邻),仁慈的老师满足了他们的要求。这时,其中一位来原创 2017-11-07 07:52:09 · 345 阅读 · 0 评论 -
Jzoj4742 单峰
很明显,山峰一定是n那么无论其他的数在n的左边还是右边都对应一种单峰数列ok,答案就是2^(N-1)#include#include#include#define L long long#define M 1000000007using namespace std;L pow(L x,L k){ L S=1; for(;k;x=x*x%M,k>>=1) if(k原创 2017-10-23 18:40:51 · 448 阅读 · 0 评论 -
Jzoj3497 隐藏指令
显然,我们在计算方案时,每次必然加入在同一维度的,方向相反的行动那么我们令f[i][j][k]表示目前在处理第i维,已经走了2*j步,其中有2*k步在第i维上那么显然,f[i+1][j][0]+=f[i][j][k] 这等于是停止当前这一维的处理,开始下一维原创 2017-09-25 21:57:22 · 317 阅读 · 0 评论 -
Jzoj3805 小X的二叉堆计数
题意:给你n个不同的数问你能构成多少个不同的二叉堆显然不能枚举,我们考虑用递推我们令f[i]表示以i为根的二叉堆有多少种令l,r为i的左右儿子,令size[i]为以i为根的堆的大小那么显然,f[i]=f[l]*f[r]*C(size[i]-1,size[l]),因为n个数互不相同,所以没有重复相当于是1~size[i]这几个数填进这个堆中,那么显然根只能填最大那个,让后在剩下的原创 2017-10-02 11:26:29 · 807 阅读 · 0 评论 -
Jzoj4709 Matrix
十分套路,这种题很明显是单独计算每个元素的贡献来搞的我们发现,对于ti,它最后到n,n的路线有C(2n-i-2,n-2)条而对于每条路线,其值发生的变化都为t[i]*a^(n-i)*b^(n-1)所以贡献就是∑t[i]*a^(n-i)*b^(n-1)*C(2n-i-2,n-2)l的话差不多吧快速求c(n,m)应该不用讲了吧#include#define L long原创 2017-10-12 21:04:50 · 352 阅读 · 0 评论 -
Jzoj5429 排列
有两个长度为n的排列A和B,定义排列的价值f(A,B)为所有满足A[i]>B[i]的位置i的数量。现给出n,A,B和S,其中A和B中有一些位置的数未知,问有多少种可能的填数的方案使得f(A,B)=S保证不存在一个位置i满足A[i]=0且B[i]=0十分有趣的题目,是个神奇的组合数学+dp我们先将问题拆成两个,因为题目保证没有A[i]=B[i]=0的位置我们将所有A[i]=0原创 2017-11-08 20:29:34 · 376 阅读 · 0 评论 -
一些基础算法的模板(持续更新)
更新中//Templates From Extended_Ash/Cooevjnz/JacaJava/Tubbcrafft//To be continued...//Suffix Automationchar str[N]; int s[N][26],mx[N],f[N],sz[N]; int last=1,cnt=1,n,v[N],r[N],ans=0; inlin原创 2017-10-25 22:05:58 · 3734 阅读 · 0 评论 -
Jzoj4894 SJR的直线
给你n条直线,每条直线的方程为Aix+Biy+Ci=0,求这些直线相交组成了多少个三角形注意,没有三条直线交于一点十分好做,我们将所有直线按照斜率排序就好了对于所有的平行线,我们考虑他们对答案的影响分别是什么假设有k条直线斜率相同,那么答案就要减去C(k,2)*(n-k)+C(k,3)注意排序的时候要将斜率算出来而不是用乘法比较#include#include#in原创 2017-11-03 17:10:14 · 392 阅读 · 0 评论 -
Jzoj4906 组合数问题
题意:noip2016d2t1我们考虑将每个数字质因数分解来做即可线性筛求出所有2000以内的质数让后直接暴力分解即可,计算C(i,j)是否为k的倍数,最后加上前缀和#include#includeint w[500],c=0,n,m,t,k,pr[2010]={0};int l[2010],f[2010][10][2];int s[2010][2010],S[2010][原创 2017-11-14 21:30:38 · 286 阅读 · 0 评论 -
Jzoj4786 小a的强迫症
小a是一名强迫症患者,现在他要给一群带颜色的珠子排成一列,现在有N中颜色,其中第i中的颜色的珠子有s[i]个,要求排列中第i种颜色的最后一个珠子一定要排在第i+1种颜色的最后一个珠子前面,问有多少种方案 ΣS组合数学法,一种一种颜色来排,我们发现对于一种颜色i,相当于在前面所有的空位种选出s[i]-1个,这个可以用组合数计算,其值为C(-1+Σs[i],s[i]-1),组合数我们可以用阶乘+逆原创 2017-11-23 21:06:02 · 481 阅读 · 0 评论 -
Jzoj5414 幸运值
校庆志愿者小Z在休息时间和同学们玩卡牌游戏。一共有n张卡牌,每张卡牌上有一个数Ai,每次可以从中选出k张卡牌。一种选取方案的幸运值为这k张卡牌上数的异或和。小Z想知道所有选取方案的幸运值之和除以998244353的余数。为什么中间跳过了几道题?因为现在来不及改了先把过了的搬上来吧套路:按位计算贡献我们考虑,对于32个位置,选择k个异或为1的选法有多少我们记cnt[i]表示第i位为1原创 2017-11-07 07:23:27 · 481 阅读 · 0 评论