zoukankan      html  css  js  c++  java
  • 省选测试

    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),然后乘上概率。

  • 相关阅读:
    笛卡尔树学习笔记
    图论基础(自认为很全)
    我的博客在这里
    C++学习资料
    test
    个人介绍
    CF1153F Serval and Bonus Problem
    【ZJOI2020】抽卡
    【LOJ】小 Q 的序列
    我的个人博客:https://xyix.github.io
  • 原文地址:https://www.cnblogs.com/hzoi-yzh/p/12199471.html
Copyright © 2011-2022 走看看