传送门 首先,有 \[ x^{\overline n}=\sum_k\begin{bmatrix}{n\\ k}\end{bmatrix}x^{k}\\ \] 那么我们只需要求出\(x^{\overline n}\)即可,考虑倍增 \[ x^{\overline 2n}=x^{\overline n}(x+n)^{\overline n} \] 假设我们现在已经求出了\(x^{\overline n}\),考虑如何求出\((x+n)^{\overline n}\) 开始颓柿子 \[ \begin…
为什么要做这题呢,当然是有用啊qwq 首先我们考虑非常经典的式子: \[x^{\overline{n}}=\sum_i \left[^n_i\right] x^i\] 然后上倍增: \[x^{\overline{2n}}=x^{\overline{n}}(x+n)^{\overline{n}}\] 相当于我们已经有了一个多项式\(f(x)\),现在要求另一个多项式\(f(x+c)\) \[f(x+c)=\sum_i f_i(x+c)^i\] \[=\sum_i x_i\sum_j f_j\tim…
题目链接 洛谷P4609 题解 感性理解一下: 一神带\(n\)坑 所以我们只需将除了\(n\)外的\(n - 1\)个元素分成\(A + B - 2\)个集合,每个集合选出最大的在一端,剩余进行排列,然后选出\(A - 1\)个集合放左边,剩余放右边 容易发现分割集合并内部排列实质对应第一类斯特林数\[\begin{bmatrix} n - 1 \\ A + B - 2 \end{bmatrix}\] 所以答案就是 \[\begin{bmatrix} n - 1 \\ A + B - 2 \e…
题面 洛谷 题解 (图片来源于网络,侵删) 以最高的柱子\(n\)为分界线,我们将左边的一个柱子和它右边的省略号看作一个圆排列,右边的一个柱子和它左边的省略号看作一个圆排列,于是,除了中间的最高的柱子,我们可以把剩下的\(n-1\)根柱子放入这\(A+B-2\)(左边\(A-1\)个右边\(B-1\)个)个圆排列中(第一类斯特林数),然后在根据组合数进行区分,有: \[ ans=s_{n-1}^{A+B-2}\times C_{A+B-2}^{A-1} \] 预处理第一类斯特林和组合数即可. #…
洛谷题面传送门 神仙题(为什么就没能自己想出来呢/zk/zk) 这是我 AC 的第 \(2\times 10^3\) 道题哦 首先考虑 \(m=2\) 的情况,我们首先可以想到一个非常 trivial 的 DP:\(dp_i\) 表示填好前 \(i\) 列的方案数,那么第 \(i\) 列显然有横着放和竖着放两种可能,方案数分别是 \(dp_{i-2}\) 和 \(dp_{i-1}\),因此我们有 \(dp_i=dp_{i-2}+dp_{i-1}\),边界条件 \(dp_0=1\),显然这个递推式…
[CF715E]Complete the Permutations(容斥,第一类斯特林数) 题面 CF 洛谷 给定两个排列\(p,q\),但是其中有些位置未知,用\(0\)表示. 现在让你补全两个排列,定义两个排列\(p,q\)之间的距离为每次选择\(p\)中两个元素交换,使其变成\(q\)的最小次数. 求距离恰好为\([0,n-1]\)的填数方案数. 加强的题目在\(BZOJ\)上有,戳这里. 题解 看到这道题目就觉得无比熟悉.回头翻了翻发现果然是省队集训的时候的题目... 果然都是原题啊..…
[CF960G]Bandit Blues(第一类斯特林数,FFT) 题面 洛谷 CF 求前缀最大值有\(a\)个,后缀最大值有\(b\)个的长度为\(n\)的排列个数. 题解 完完全全就是[FJOI]建筑师的加强版本. 显然每一个前缀最大值和一段连续的区间构成了一个环排列,显然每个前缀最大值就是这个环中的最大值.而全局最大值一定把前后缀最大值分开. 所以答案考虑除最大值外,左侧需要\(a-1\)个前缀最大值,右侧需要\(b-1\)个前缀最大值.也就是一共要\(a+b-2\)个环,那么这一部分的贡…
[Luogu4609]建筑师(组合数学) 题面 洛谷 题解 首先发现整个数组一定被最高值切成左右两半,因此除去最高值之后在左右分开考虑. 考虑一个暴力\(dp\) ,设\(f[i][j]\)表示用了\(i\)个数并且能够看到\(j\)个的方案数,强制最大值在最右侧. 每次添加最小的一个数放进来:\(f[i][j]=f[i-1][j-1]+f[i-1][j]*(i-2)\) 如果把它放在最前面,答案加一,也就是\(f[i-1][j-1]\)转移过来, 否则的话,因为最大值强制放在最后面,所以还剩下…
Codeforces 题面传送门 & 洛谷题面传送门 神仙题.在 AC 此题之前,此题已经在我的任务计划中躺了 5 个月的灰了. 首先考虑这个最短距离是什么东西,有点常识的人(大雾)应该知道,对于一个排列 \(p\) 而言,通过交换两个元素使其变成 \(1,2,3,4,\cdots,n\) 的最少步数等于 \(n\) 减去该排列中置换环的个数,因此对于两个排列 \(a,b\) 而言,将 \(a\) 变成 \(b\) 所需的最少步数即是在所有 \(a_i\) 与 \(b_i\) 之间连 \(a_i…
目录 参考资料 前言 暴力 nlog^2n的做法 nlogn的做法 代码 参考资料 百度百科 斯特林数 学习笔记-by zhouzhendong 前言 首先是因为这道题,才去研究了这个玩意:[2019雅礼集训][第一类斯特林数][NTT&多项式]permutation 感觉这个东西非常的...巧妙. 暴力 第一类斯特林树S(n,k)就是将n个数字划分为k个不相区分的圆排列的方案数(即忽略顺序). 首先,第一类斯特林数有一个人尽皆知的\(O(n^2)\)递推式: \[S(n,k)=S(n-1,k-…
To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含三个整数N.M.P,分别表示该数列数字的个数.操作的总个数和模数. 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值. 接下来M行每行包含3或4个整数,表示一个操作,具体如下: 操作1: 格式:1 x y k 含义:将区间[x,y]内每个数乘上k 操作2: 格式:…
Find the Permutations Sorting is one of the most used operations in real life, where Computer Science comes into act. It is well-known that the lower bound of swap based sorting is nlog(n). It means that the best possible sorting algorithm will take…
题目 CF960G 做法 设\(f(i,j)\)为\(i\)个数的序列,有\(j\)个前缀最大值的方案数 我们考虑每次添一个最小数,则有:\(f(i,j)=f(i-1,j)+(i-1)*f(i-1,j-1)\),显然这是第一类斯特林数 从而我们得到一个朴素的答案:\[Ans=\sum\limits_{i=1}^{n}f_{i,a-1}×f_{n-1-i,b-1}×C_{n-1}^i\] 理解:枚举\(i+1\)为最大值添的位置,则已限制了前缀最值个数及后缀最值个数,然后再乘上前半部分所填的数 观…
Count the Buildings Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1249    Accepted Submission(s): 408 Problem Description There are N buildings standing in a straight line in the City, numbere…
Examining the Rooms Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1138    Accepted Submission(s): 686 Problem Description A murder happened in the hotel. As the best detective in the town, yo…
目录 题意 输入格式 输出格式 思路 代码 题意 找有多少个长度为n的排列,使得从左往右数,有a个元素比之前的所有数字都大,从右往左数,有b个元素比之后的所有数字都大. n<=2*10^5,a,b<=n 输入格式 输入三个整数n,a,b. 输出格式 输出一个整数,表示答案. 思路 这道题是真的神啊... 首先,根据官方题解的思路,首先有一个n^2的DP: 定义dp[i][j]表示一个长度为i的排列,从前往后数一共有j个数字大于所有排在它前面的数字. 首先有转移式: \[dp[i][j]=dp[…
传送门 弱化版:FJOI2016 建筑师 由上面一题得到我们需要求的是\(\begin{bmatrix} N - 1 \\ A + B - 2 \end{bmatrix} \times \binom {A+B-2} {A - 1}\) 注意到这题的复杂度瓶颈是求第一类斯特林数,因为求组合数可以\(O(N)\),但是暂时我们求第一类斯特林数只有\(O(N^2)\)的方法 考虑第一类斯特林数的转移式子:\(\begin{bmatrix} a \\ b \end{bmatrix} = \begin{b…
Examining the Rooms Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1661    Accepted Submission(s): 1015 Problem Description A murder happened in the hotel. As the best detective in the town, yo…
题目链接 CF960G 题解 同FJOI2016只不过数据范围变大了 考虑如何预处理第一类斯特林数 性质 \[x^{\overline{n}} = \sum\limits_{i = 0}^{n}\begin{bmatrix} n \\ i \end{bmatrix}x^{i}\] 分治\(NTT\)即可在\(O(nlog^2n)\)的时间内预处理出同一个\(n\)的所有\(\begin{bmatrix} n \\ i \end{bmatrix}\) 其实还有比较优美的倍增\(fft\)的\(O(…
题目大意:n幢楼,从左边能看见f幢楼,右边能看见b幢楼 楼高是1~n的排列. 问楼的可能情况 把握看到楼的本质! 最高的一定能看见! 计数问题要向组合数学或者dp靠拢.但是这个题询问又很多,难以dp 如果把能看见的和之后挡住的看成一组的话... 那么可以看成这样: 每一组要固定第一个,,后面可以随便动,n!/n=(n-1)! 第一类斯特林数圆排列! 可分成的组数是:S[n-1][f+b-2](扣除中间最高的) 每一个圆排列只有最大值靠前的唯一展开方式 所以方案数是S[n-1][f+b-2]*C(…
$ \color{#0066ff}{ 题目描述 }$ 给你三个正整数 \(n\),\(a\),\(b\),定义 \(A\) 为一个排列中是前缀最大值的数的个数,定义 \(B\) 为一个排列中是后缀最大值的数的个数,求长度为 \(n\) 的排列中满足 \(A = a\) 且 \(B = b\) 的排列个数.\(n \le 10^5\),答案对 \(998244353\) 取模. \(\color{#0066ff}{输入格式}\) 三个整数n,a,b \(\color{#0066ff}{输出格式}\…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3625 题意: n个房间,房间里面放着钥匙,允许破门而入k个,拿到房间里面的钥匙后可以打开对应的门,但是1号门不能破门而入,求这样检查完所有房间,概率是多少? 分析: 钥匙随机放到房间,全排列有n!: n个房间,破k个门进入,就是第一类斯特林数S(n,k): 但是,第一个门不能破门而入,就是要减去S(n-1,k-1): 然后求和SUM = S(n,i)  {1<=i<=k} 概率就是 SUM / N…
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4372 首先,最高的会被看见: 然后考虑剩下 \( x+y-2 \) 个被看见的,每个带了一群被它挡住的楼,其实方案数是圆排列,每个圆从最高的楼开始断掉都是不同的方案: 再把这 \( x+y-2 \) 个圆排列分成两组放左右两边,它们按最高楼的高度就自动有顺序了,不必再算: \( s[i][j] \) 表示第一类斯特林数,答案就是 \( s[n-1][x+y-2] * C_{x+y-2}^{x-1} \)…
题目链接:https://vjudge.net/problem/UVA-11077 题意: 问n的全排列中多有少个至少需要交换k次才能变成{1,2,3……n}. 题解: 1.根据过程的互逆性,可直接求{1,2,3……n}至少需要交换多少次才能变成{a1,a2,a3……an},因此可直接把{a1,a2,a3……an}看成是{1,2,3……n}的置换.为什么呢? 答:1 2 3 2 3 1  可知把“2 3 1”看作是经过置换后的序列,则:2-->1(2放到1).3-->2(3放到2).1--&g…
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3625 学习斯特林数:https://blog.csdn.net/qq_33229466/article/details/75042895 https://www.cnblogs.com/gzy-cjoier/p/8426987.html http://www.cnblogs.com/zhouzhendong/p/Stirling-Number.html 关于这道题: 得到一把钥匙后,可以连续开的门与钥匙…
Description $N$座高楼,高度均不同且为$1~N$中的数,从前向后看能看到$F$个,从后向前看能看到$B$个,问有多少种可能的排列数. $T$组询问,答案模$1000000007$.其中$n\leq 2000,T\leq 100000$ 题解: 可以考虑现将最高的拿出来,那么可以考虑左边需要有$F-1$个房子成递增关系,那么可以将左边的房子分成$F-1$个组,右边有$B-1$个房子成递减关系,也是如此. 不禁想到第一类斯特林数,$s(p,k)$是将将$p$个物体排成$k$个非空循环排…
题目链接:https://vjudge.net/problem/HDU-4372 Count the Buildings Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2509    Accepted Submission(s): 815 Problem Description There are N buildings standin…
传送门 没想到连黑题都会有双倍经验的 其实这题本质上是和CF960G Bandit Blues一样的,不过那里是要用分治FFT预处理第一类斯特林数,这里直接打表预处理第一类斯特林数就可以了 //minamoto #include<bits/stdc++.h> #define R register #define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i) #define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)…
传送门 可以去看看litble巨巨关于第一类斯特林数的总结 设\(f(i,j)\)为\(i\)个数的排列中有\(j\)个数是前缀最大数的方案数,枚举最小的数的位置,则有递推式\(f(i,j)=f(i-1,j-1)+(i-1)\times f(i-1,j)\) 这个就是第一类斯特林数 第一类斯特林数中\(S_1(n,m)\)是\(\prod_{i=0}^{n-1}(x+i)\)中\(x^m\)的系数,可以用分治\(FFT\)做到\(O(n\log^2n)\)的复杂度 首先\(n\)肯定是前缀最大值…
传送门 题意: 现在有一个人分别从\(1,n\)两点出发,包中有一个物品价值一开始为\(0\),每遇到一个价值比包中物品高的就交换两个物品. 现在已知这个人从左边出发交换了\(a\)次,从右边出发交换了\(b\)次. 现在问有多少个排列满足这一条件. 思路: 倒过来考虑的话,显然全局最大值为最后一次交换. 然后左边我们会放置\(a-1\)个递增的物品,右边放\(b-1\)个递减的物品,其余的物品我们在中间部分任意放置即可,但要保证价值在一定范围. 将问题进一步抽象,我们即要将\(n-1\)个数划…