Description n<=1e9,M,K<=100 Solution 显然任选m个港口的答案是一样的,乘个组合数即可. 考虑枚举m个港口的度数之和D 可以DP计算 记\(F_{m,D}\)为将D的度数分给m个港口的方案数 枚举新的一个度数分配给谁,然后此时可能某一个超出了限制,减掉这一个的贡献. 接下来我们可以用一个超级根把D个点连起来 prufer序简单计数即可 \(n-m+1\)个点,其中超级根出现了\(D-1\)次 就是\({n-m-1\choose D-1}(n-m)^{n-m-D…
Description n,m<=10000 Solution 考虑暴力轮廓线DP,按顺序放骨牌 显然轮廓线长度为N+M 轮廓线也是单调的 1表示向上,0表示向右 N个1,M个0 只能放四种骨牌 四种转移写出来,就是 1000 0001 1110 0111 1010 0011 1100 0101 相当与一个1和后面3格的一个0换过来,中间不变 把模3相同的分组, 转换成只换相邻的10 再把它看作轮廓线,相当与每次只能放1×1的骨牌,问拓扑序个数 利用杨氏矩阵的钩子定理 就是矩阵大小的阶乘除以每个…
Description: \(1<=n<=1e9,1<=m,k<=100\) 模数不是质数. 题解: 先选m个点,最后答案乘上\(C_{n}^m\). 不妨枚举m个点的度数和D,那么我们需要解决两个问题: 一共m个有标号盒子,D个有标号小球放到盒子里,且每个盒子的球数不超过k的方案数. n-m个有标号点的D棵有根树的森林划分 Task1: 事实上这个东西可以直接NTT卷起来,效率应该是最高的,但是因为模数不是质数,所以不行. 设\(f[i][j]\)表示i个盒子,j个小球的方案数.…
Description n<=200000 Solution 比赛时没做出这道题真的太弟弟了 首先我们从小到大插入数i,考虑B中有多少个区间的最大值为i 恰好出现的次数不太好计算,我们考虑计算最大值小于等于i,再做一个差分即可. 然后直接分成长度在一段内的和长度跨过一段边界的考虑,跨过完整的一段的区间的答案一定是整个序列最大值 分类讨论即可,式子并不难推,有一个地方可以直接暴力计算前缀和. 复杂度O(N)或加上O(MAX(a)) Code #include <bits/stdc++.h>…
Description 给出一个长为n的字符串\(S\)和一个长为n的序列\(a\) 定义一个函数\(f(l,r)\)表示子串\(S[l..r]\)的任意两个后缀的最长公共前缀的最大值. 现在有q组询问,每组询问给出\(L,R,x\) 你需要找到一个子串\(S[l,r]\)满足\([l,r]\subset[L,R]\)且\(f(l,r)\geq x\) 同时需要满足\(max(a[l..r])\)最小 求这个最小值,无解则输出-1 \(n,q\leq 50000\) Solution 这道题实际…
Description: 1<=n<=5e4 题解: 考虑\(f\)这个东西应该是怎样算的? 不妨建出SA,然后按height从大到小启发式合并,显然只有相邻的才可能成为最优答案.这样的只有\(O(n log n)\)个有用的串. 建SAM在fail树上启发式合并是一样的. 然后用个主席树就可以快速查询答案. 现在思考查询一个[x,y],要求f>=z怎么办? 考虑一个区间[l,r],如果a[l-1]<=max[a[l..r]]或a[r+1]<=max[a[l..r]]显然延伸…
Description: p<=10且p是质数,n<=7,l,r<=1e18 题解: Lucas定理: \(C_{n}^m=C_{n~mod~p}^{m~mod~p}*C_{n/p}^{m/p}\) 若把\(n,m\)在p进制下分解,那么就是\(\prod C_{n[i]}^{m[i]}\). 对于\(∈[l,r]\)的限制先容斥为\(<=r\). 考虑从低位到高位的数位dp,设\(f[i][S][j]\)表示做了前i位,S[i]第i个数选的数是<=还是>,进了j位,的…
Description: 题解: 这种东西肯定是burnside引理: \(\sum置换后不动点数 \over |置换数|\) 一般来说,是枚举置换\(i\),则\(对所有x,满足a[x+i]=a[i]\),然后a还要满足题目条件,但是仔细想一想,设\(d=gcd(i,n)\),只要a[0..d-1]满足就好了,所以: \(Ans=\sum_{d|n}f(d)*\phi(n/d),f(d)表示\)不考虑循环同构时的答案. 然后考虑dp: 枚举0这一列的块是什么,然后设\(dp[i][1..4][…
Description: \(1<=n,k<=1e5,mod~1e9+7\) 题解: 考虑最经典的排列dp,每次插入第\(i\)大的数,那么可以增加的逆序对个数是\(0-i-1\). 不难得到生成函数: \(Ans=\prod_{i=0}^{n-1}(\sum_{j=0}^ix^j)[x^k]\) \(=\prod_{i=1}^{n}{1-x^i\over 1-x}[x^k]\) 分母是一个经典的生成函数: \({1\over 1-x}^n=(\sum_{i>=0}x^i)^n=\sum…
Description \(n,m<=1e4,mod ~1e9+7\) 题解: 显然右边那个图形只有旋转90°和270°后才能放置. 先考虑一个暴力的轮廓线dp: 假设已经放了编号前i的骨牌,那么这些骨牌形成的图形一定是杨表那样的. 对轮廓线来考虑,不妨设1表示向上走,0表示向右走. 初始状态是:111-(n个1)000..(m个0) 那么四种转移为: 1110->0111 1000->0001 1010->0011 1100->0101 这样暴力dp应该能过n,m<=…