UOJ Logo wangrx的博客

博客

#965 solution

2022-03-21 12:38:28 By wangrx

原题等价于,反转 01 串的一段后缀,使得 01 串的 popcnt 最小。

证明:因为没有子串 10,最后一定是 00000...11111 。

于是把原串分为左右两段:

  • 左边一段删去所有的 1,操作次数即 popcnt。
  • 右边一段删去所有的 0,操作次数即反串的 popcnt。

注意到反转后缀对 popcnt 的增减量是后缀和(0 为 1,1 为 -1),

考虑增量构造,设 $r$ 为当前情况下原串的 popcnt,$m$ 为当前情况下的答案。

  • 若往后添加一个 $1$(概率 $1-p_n$),$m$ 不变,$r++$。
  • 若往后添加一个 $0$(概率 $p_n$),
    • 如果 $r=m,r,m$ 均不变。(不反转是最优的)
    • 否则 $r$ 不变,$m++$。(反转会多产生 $1$ 的代价)

于是设 $l=r-m$,则设 $f_{n,l,m}$ 即可得到 $\Theta(n^3)$ 的 dp。

注意到期望满足线性性,于是设 $f_{n,l}$ 表示期望,$g_{n,l}$ 表示概率,即可得到 $\Theta(n^2)$ 的 dp:

$$f_{0,0}=0,g_{0,0}=1$$ $$f_{n,l}=p_n(f_{n-1,l+1}+g_{n-1,l+1})+(1-p_n)f_{n-1,l-1}\quad(l\not=0)$$ $$g_{n,l}=p_ng_{n-1,l+1}+(1-p_n)g_{n-1,l-1}\quad(l\not=0)$$ $$f_{n,0}=p_n(f_{n-1,0}+f_{n-1,1}+g_{n-1,1})$$ $$g_{n,0}=p_n(g_{n-1,0}+g_{n-1,1})$$


接下来考虑怎么多项式搞这玩意。

这玩意很毒瘤,不是倍增也不是分治,而是倍僧套分治。。。

显然往末尾填 $p_n=0$ 对最终答案没有影响,把 $n$ 填充为 $2$ 的幂次。

注意到 $l\le n$,因此 dp 状态相当于一个等腰直角三角形

显然这玩意适合倍增

于是我们只要考虑如下直角梯形的转移

卷积允许我们作如下等腰梯形的转移

于是把梯形分成左右两段,上面就可以卷积转移

下面的转移可以分治

于是直角梯形的转移就可以分治 FFT $\Theta(n\log^2 n)$ 解决。

等腰直角三角形的转移就倍增套上直角梯形的转移就行了,

总复杂度 $T(n)=T\left(\dfrac{n}{2}\right)+\Theta(n\log^2 n)=\Theta(n\log^2 n)$

#970 solution

2022-03-15 12:48:23 By wangrx

首先题解中给出结论:

最后一个条件不成立,当且仅当能将 $S_1,S_2,\cdots,S_m$ 划分为两组 $L,R$,使得 $\displaystyle\max_{a\in S,S\in L}a<\min_{a\in S,S\in R}a$ 。

证明题解中有,就略去了。

在此基础上,考虑容斥,设 $f_{n,m}$ 为答案,$g_{n,m}=\displaystyle{ n\brace m}$,则

$$g_{n,m}\sum_k\sum_{\small\sum_{i=1}^ka_i=n\atop\sum_{i=1}^nb_i=m}f_{i,j}$$

即,将 $1,2,\cdots,n$ 任意划分为 $m$ 个无标号非空集合,等价于将 $m$ 个集合划分为 $k$ 组 $T_1,T_2,\cdots,T_k$,使得 $\forall i\in[1,k),\displaystyle\max_{a\in S,S\in T_i}a<\min_{a\in S,S\in T_{i+1}}a$ 。

显然该式可用二元生成函数表示

$$g(x,y)=\dfrac{1}{1-f(x,y)}$$

$$f(x,y)=1-\dfrac{1}{g(x,y)}$$

$\Theta(nm)$ 预处理出第二类斯特林数后,$\Theta(n^2\log n)$ 二维 FFT + 多项式求逆即可。

因为要任意模数 NTT,所以跑的还没 $\Theta(n^3)$ 快,希望出题人下次给个 NTT 模数。。。

#951 solution

2022-03-07 11:35:06 By wangrx

题意

给定一 $k$ 维位线性空间,需要找出向量序列 $\vec{a}_1,\vec{a}_2,\cdots,\vec{a}_n$,

使之张成的线性子空间维度为 $t$,且子空间中不包含 $\vec{X}$。

$\forall t\in[1,k]$,求方案数。

题解

首先特判 $\vec{X}=\vec{0}$ 的情况:此时等价于 $\vec{a}_1,\vec{a}_2,\cdots,\vec{a}_n$ 线性无关。

对于 $\vec{a}_1,\vec{a}_2,\cdots,\vec{a_i}$,其张成的线性子空间维度为 $i$,包含 $2^i$ 个向量。

$\vec{a}_{i+1}$ 不能是这 $2^i$ 个向量中的任意一个,因此答案即

$$\prod_{i=0}^{n-1}(2^k-2^i)$$

接下来考虑 $\vec{X}\not=\vec{0}$ 的情况,显然答案和 $\vec{X}$ 具体是什么无关。

同样考虑逐步添加向量,设当前线性子空间 $V$ 的维度为 $i$。

  • 若添加下一个向量后 $V$ 维度不变,则下一个向量在 $V$ 中,
    有 $|V|-1=2^i-1$ 种可能。
  • 否则,由于 $\vec{X}\notin V$,设 $W=V\cup\{\vec{a}+\vec{X}|\vec{a}\in V\}$,
    则下一个向量一定不在 $W$ 中,否则就会表出 $\vec{X}$ 或使维度不增加,
    有 $2^k-|W|=2^k-2^{i+1}$ 种可能。

总上,因为加入了 $n$ 个向量,最终维度为 $t$,
有 $t$ 次加入使维度增加,其余 $n-t$ 次加入使维度不变,答案即

$$\left(\prod_{i=0}^{t-1}(2^k-2^{i+1})\right)\sum_{\sum_{i=1}^tb_i=n-t}\prod_{i=1}^t(2^i-1)^{b_i}$$ $$=[x^{n-t}]\prod_{i=1}^t\dfrac{2^k-2^i}{1-(2^i-1)x}$$

$n$ 很大,但分母是已因式分解的多项式,考虑线性递推

$$[x^n]\dfrac{1}{1-ax}=a^n$$ $$[x^n]\dfrac{1}{(1-ax)(1-bx)}=\sum_{k=0}^na^kb^{n-k}=b^n\sum_{k=0}^n\left(\dfrac{a}{b}\right)^k$$ $$=b^n\dfrac{\left(\dfrac{a}{b}\right)^{n+1}-1}{\left(\dfrac{a}{b}\right)-1}=\dfrac{a^{n+1}}{a-b}+\dfrac{b^{n+1}}{b-a}$$

由于求和满足线性性,归纳可得

$$[x^n]\prod_{1\le i

因此答案的通项为

$$[n\ge t]\left(\prod_{i=1}^t(2^k-2^i)\right)\sum_{i=1}^t\dfrac{(2^i-1)^{n-1}}{\displaystyle\prod_{\small j\not=i\atop1\le j\le t}(2^i-2^j)}$$

显然 $\displaystyle\left(\prod_{i=1}^t(2^k-2^i)\right)$ 可以 $\Theta(n)$ 递推。于是设

$$f_t=\sum_{i=1}^t\dfrac{(2^i-1)^{n-1}}{\displaystyle\prod_{\small j\not=i\atop1\le j\le t}(2^i-2^j)}\qquad(t\le n)$$

将下面的 $\prod$ 拆开

$$f_t=\sum_{i=1}^t\dfrac{(2^i-1)^{n-1}}{\displaystyle\left(\prod_{j=1}^{i-1}(2^i-2^j)\right)\left(\prod_{j=i+1}^t (2^i-2^j)\right)}$$

将 $2^i$ 从 $\prod$ 中提出来

$$f_t=\sum_{i=1}^t\dfrac{(2^i-1)^{n-1}}{\displaystyle2^{i(t-1)}\left(\prod_{j=1}^{i-1}(1-2^{j-i})\right)\left(\prod_{j=i+1}^t (1-2^{j-i})\right)}$$

$$f_t=\sum_{i=1}^t\dfrac{2^{-i(t-1)}(2^i-1)^{n-1}}{\displaystyle\left(\prod_{j=1}^{i-1}(1-2^{-j})\right)\left(\prod_{j=1}^{t-i} (1-2^{j})\right)}$$

分母已经是卷积形式了,套路性的拆开 $2^{-i(t-1)}$

$$-i(t-1)=\dbinom{t-i}{2}-\dbinom{t}{2}-\dbinom{i}{2}$$

$$f_t=2^{\binom{t-i}{2}}\sum_{i=1}^t\dfrac{2^{-\binom{i}{2}}(2^i-1)^{n-1}}{\displaystyle\prod_{j=1}^{i-1}(1-2^{-j})}\times\dfrac{2^{\binom{t-i}{2}}}{\displaystyle\prod_{j=1}^{t-i}(1-2^j)}$$

NTT $\Theta(n\log n)$ 卷积即可。即

$$a_i=\dfrac{(2^i-1)^{n-1}}{\displaystyle\prod_{j=1}^{i-1}(1-2^{-j})},b_i=\dfrac{1}{\displaystyle\prod_{j=1}^i(1-2^j)},c_i=2^{\binom{i}{2}}$$

$$f_t=c_t\sum_{i=1}^t(a_ic_i^{-1})(b_{n-i}c_{n-i})$$

$$ans=\displaystyle\mathop{\operatorname{xor}}\limits_{t=1}^{\min(k,n)}\left(f_t\prod_{i=1}^t(2^k-2^i)\right)$$

预处理 $a_i,b_i,c_i$ 有轻微卡常注意。

#934 solution

2022-02-28 05:53:56 By wangrx

首先改坐标:$a\leftarrow a-1,b\leftarrow b-1$。

设 $g_{k,y}$ 为导弹和坦克走到 $(k,y)$ 并相遇的方案数,$f_{k,y}$ 为导弹和坦克走到 $(k,y)$ 并第一次相遇的方案数。则

$$g_{k,y}=\dbinom{2k+a}{k,k,a}\dbinom{a}{y}=\sum_{i=0}^kf_{k-i,y}\dbinom{2i}{i}$$

设 $h(x)=\displaystyle\sum_{k=0}^\infty\dbinom{2k}{k}x^k$,则

$$\dbinom{2(k+1)}{k+1}=\dfrac{(2k+2)^{\underline{2}}}{(k+1)^2}\dbinom{2k}{k}=\left(4-\dfrac{2}{k+1}\right)\dbinom{2k}{k}$$

$$h(x)=4xh(x)-2\int h(x)\mathrm{d}x+1$$

$$h'(x)=4xh'(x)+4h(x)-2h(x)$$ $$\dfrac{h'(x)}{h(x)}=\dfrac{2}{1-4x}$$ $$h(0)=1,h(x)=Ce^{\int\frac{2\mathrm{d}x}{1-4x}}=\dfrac{1}{\sqrt{1-4x}}$$

设 $f_y(x)=\displaystyle\sum_{k=0}^\infty f_{k,y}x^k,g_y(x)=\displaystyle\sum_{k=0}^\infty g_{k,y}x^k$,则

$$g_y(x)=\dfrac{f_y(x)}{\sqrt{1-4x}}$$

$$f_y(x)=\sqrt{1-4x}g_y(x)$$

于是答案即

$$\sum_{y=0}^a\sum_{k=0}^bf_{k,y}f_{b-k,y}$$ $$=\sum_{y=0}^a[x^b]f^2_y(x)$$ $$=\sum_{y=0}^a[x^b](1-4x)g_y^2(x)$$ $$=\sum_{y=0}^a\dbinom{a}{y}^2[x^b](1-4x)g_0^2(x)$$ $$=\dbinom{2a}{a}[x^b](1-4x)g_0^2(x)$$

$\Theta(a+b)$ 计算阶乘和卷积即可。

对 #887 的进一步研究

2021-11-17 11:58:38 By wangrx

对 #887 的求解促使我们研究更一般的情况

$$f_{n+1}=af_n^2+bf_n+c\qquad(a\not=0)$$

这一递推统称为二次非线性递推。

显然,我们可以用同样的方法分离变量

$$\left(af_{n+1}+\dfrac{b}{2}\right)=\left(af_{n+1}+\dfrac{b}{2}\right)^2+ac+\dfrac{b}{2}-\dfrac{b^2}{4}$$

因此,我们只要考虑一种情况

$$f_{n+1}=f_n^2+c$$

它就是 Pollad-rho 中所用到的随机函数。

  • $c=0$ 时,显然有通项公式 $f_n=f_0^{2^n}$。

  • $c\not=0$ 时,该数列是具有 混沌性 的,这意味着我们求不出一般的通项公式。 但我们可以渐进估计它。我们有

    $$f_n\sim C^{2^n}\qquad(n\rightarrow\infty)$$

    $C$ 是某个常数。

因此,考场上遇到它,套路是分离变量,如果 $c\not=0$ 就算了吧(

wangrx Avatar