省选测试

A. 序列

变化次数线段树很不好维护。
不妨考虑根号做法,暴力一部分。
发现对整块的修改,add操作单调性不变,按w+add sort后次数的变化一定在前缀,所以暴力保持整块内部有序。
修改时两边重构,取max时lower_bound,然后在该位置差分,更新max标记时要减去当前的add标记,相当于max是相对于初始重构序列的。
单点查询时直接重构所在块。
这样做复杂度是(nsqrt n logn)的。我的代码调块长卡不过。
瓶颈在于二分,发现有效修改位置一定是单调不降的,所以对每个块维护单调指针,重构时移动到块首。由于操作最多重构两个块,块长(sqrt n)这样做复杂度是对的(nsqrt n)

暂咕.

之前某次没放出来的题解orz

T1.解方程

求方程(sumlimits_{i=1}^{n}x_i=m)的解个数
如果没有限制,可以转化问题为把m个无差别物品放入n个有差别非空箱子的方案数。
由挡板法(inom{m-1}{n-1})
对于限制(x_i geq A_i),可以从m个物品中先拿出(A_i-1)个,最后把这些物品钦定放到(x_i)上,保证一定满足。
对于限制(x_i leq A_i),由于该类限制很少,暴力枚举所有不合法情况然后做集合容斥。
模数是合数没有逆元,Exlucas计算,最后用Crt合并。预处理需要的前缀积可以快不少
注意(a^{varphi (m)}equiv 1(mod m)),所以用快速幂计算逆元需要求(varphi)

B.宇宙序列

递推式是异或卷积可以FWT,不断DFT自乘IDFT能做到(O(pn2^n))
有个结论,点值表达式的前缀和IDFT后可以得到系数的前缀和。
由于模数很小,所以可以倍增预处理所有值变换次幂次带来的贡献。
(f[x][i]=sumlimits_{j=0}^{2^i-1}x^{2^j})
(f[x][i]=f[x][i-1]+f[x^{2^{2^{i-1}}}][i-1])
枚举每个点值,不断更新累加前缀和。
最后IDFT得到答案。

C.exp

大神期望题
30pts:从末状态倒推到给定状态,对于每个状态(f[s]=frac{sumlimits_{i=1}^{n}f[to]+cost}{n})
正解:首先断环成链。由于倒推需要枚举具体的状态,试着存概率正推
发现有区间dp的性质。
(f[l][r])为考虑了区间([l,r])除了r都被选的期望。
(g[l][r])同理为概率
g的需要枚举上一个除r以外o的位置转移,而每个位置的概率不同,所以再定义(p(l,r,k))为区间[l,r]内r未选且k最后一个被选的概率。
所以(g[l][r]=sumlimits_{i=l}^{r-1}p(l,r,k))
(f[l][r]=frac{1}{g[l][r]}sumlimits_{i=l}^{r-1}p(l,r,k)(f[i][k]+f[k+1][r]+frac{k-l}{2}))理解加权平均
现在问题在于求出p,设[l,k-1]中有x个o,[k+1,r-1]中有y个o,
(p(l,r,k)=inom{x+y}{x}left ( frac{k-l+1}{r-l+1} ight )^{x+1}g[l][k]left ( frac{r-k}{r-l+1} ight )^yg[k+1][r])
组合数两部分交叉的顺序,不用排列的原因是内部转移的时候考虑了顺序(枚举k),然后乘上概率。

原文地址:https://www.cnblogs.com/hzoi-yzh/p/12199471.html