胡策 sol

T1

算法一

我会暴力!

枚举每个位置放哪个兵种。

时间复杂度 \(O(\prod K_i)\),期望得分 \(10\) 分。

算法二

考虑一个暴力 dp,令 \(f_{l,r,k}\) 表示区间 \([l,r]\) 最大值为 \(k\) 时的答案,\(g_{l,r,k}\) 表示 \(f_{l,r,k}\) 的前缀最大值,转移:

\[f_{l,r,k}=\max_{l<p<r}\{g_{l,p-1,k}+g_{p+1,r,k}+k\sum_{p\in[i,j]\in[l,r]}Q_{i,j}-c\} \]

时间复杂度 \(O(n^2\sum K_i)\),期望得分 \(40\) 分。

算法三

事实上我们并不需要真的保证最大值为 \(k\),因为如果 \(p\) 没有取到最大值则一定不优,因此只需要:

\[f_{l,r}=\max_{l<p<r}\{f_{l,p-1}+f_{p+1,r}+V_{p,k}\sum_{p\in[i,j]\in[l,r]}Q_{i,j}-C_{p,k}\} \]

其中求

\[V_{p,k}\sum_{p\in[i,j]\in[l,r]}Q_{i,j}-C_{p,k} \]

最大值的部分相当于在凸包上求 \(\sum Q\) 的函数值,可以预处理每个位置的凸包,然后转移时二分线段。

时间复杂度 \(O(n^2\sum \log K_i)\),期望得分 \(70\) 分。

算法四

已经呼之欲出了,考虑在算法三的基础上,改变 \(l,r,p\) 的枚举顺序,即可使 \(\sum Q\) 单调,所以只需要在凸包上扫一遍。

时间复杂度 \(O(n^3+\sum K_i \log K_i)\),常数极小,期望得分 \(100\) 分。

T2

算法一

我会暴力!

枚举每个点接在哪个点下面。

时间复杂度 \(O(n!)\),期望得分 \(10\) 分。

算法二

\(b_i\)\(a_i\) 的前缀和,考虑计算 \(i\) 的期望深度,枚举 \(i\) 接在 \(j\) 下面

\[E(dep_i)=c_i+\sum_{j=1}^{i-1}\dfrac{a_j}{b_{i-1}}E(dep_j)=c_i+\dfrac{1}{b_{i-1}}\sum_{j=1}^{i-1}a_jE(dep_j) \]

维护前缀和即可 \(O(n)\) 递推,子任务二中 \(u=1\),因此答案为 \(E(dep_v)\)

时间复杂度 \(O(n\log V+q)\),可以通过子任务二,结合算法一,期望得分 \(30\) 分。

算法三

不妨设 \(u<v\),可以尝试枚举 \(u\)\(v\) 的 LCA 为 \(x\),如果能计算出 \(x=LCA(u,v)\) 的概率 \(P(x)\),那么答案即为

\[E(dep_u)+E(dep_v)-2\sum_{i=1}^{u}P(i)E(dep_i) \]

枚举在 \(u\)\(v\) 路径上的点,编号在 \((x,u)\) 中的点既有可能在 \(u\)\(x\) 的路径上,也有可能在 \(v\)\(x\) 的路径上,在 \((u,v)\) 中的点只可能在 \(v\)\(x\) 的路径上。

\[P(x)=\dfrac{a_x^2}{b_{u-1}b_{v-1}}\prod_{i=x+1}^{u-1}\dfrac{2a_i+b_{i-1}}{b_{i-1}}\prod_{j=u+1}^{v-1}\dfrac{a_j+b_{j-1}}{b_{j-1}} \]

预处理后不难做到 \(O(qn\log V)\),期望得分 \(60\) 分。

算法四

继续化简,注意到 \(a_j+b_{j-1}=b_j\),因此

\[P(x)=\dfrac{a_x^2}{b_{u-1}b_{v-1}}\prod_{i=x+1}^{u-1}\dfrac{2a_i+b_{i-1}}{b_{i-1}}\prod_{j=u+1}^{v-1}\dfrac{a_j+b_{j-1}}{b_{j-1}}=\dfrac{a_x^2}{b_{u-1}b_u}\prod_{i=x+1}^{u-1}\dfrac{2a_i+b_{i-1}}{b_{i-1}} \]

只与 \(u\) 有关,于是可以预处理出 \(lca_u\) 表示 \(u\)\(v(v>u)\) 的 LCA 的期望深度,不难做到 \(O(n\log V)\)。注意特判 \(u\) 为 LCA 的情况。

总时间复杂度 \(O(n\log V + q)\),期望得分 \(100\) 分。

T3

设字符串中 x 的数量为 \(c\)

算法一

我会暴力!

枚举每个 x 是什么括号,再枚举取反哪个区间。

时间复杂度 \(O(2^cn^3)\),期望得分 \(5\) 分。

算法二

依然先枚举每个 x 是什么括号,考虑如何在 \(O(n^2)\) 的时间内 check。

首先将 ( 设为 \(1\)) 设为 \(-1\),观察到最终的字符串形如 (不取反)(取反)(不取反),我们可以设计一个 dp。

\(f_{i,j,k}\ (k\in \{0,1,2\})\) 表示 dp 到第 \(i\) 位,前缀和为 \(j\)\(i\) 处于第 \(k\) 段是否合法。

时间复杂度 \(O(2^cn^2)\),期望得分 \(15\) 分。

算法三

考虑在算法二的基础上进行优化,发现 dp 值只记录了 0/1,而转移时 \(j\) 的变化量为 \(1\),于是可以使用 bitset 优化。

时间复杂度 \(O(2^c\frac{n^2}{w})\),期望得分 \(25\) 分。

算法四

似乎可以枚举取反区间进行 dp,我不太清楚,但应该本质和正解相同,感兴趣的话可以自行研究一下。

时间复杂度 \(O(n^4)\),期望得分 \(55\) 分。

算法五

\(S_i\) 表示原括号序列的前缀和,如果取反区间 \([l,r]\) 后括号序列合法,那么 \(S_n-2(S_r-S_l)\),即 \(S_r=S_l+\dfrac{S_n}{2}\),取反后括号序列的前缀和如下:

\[\left\{ \begin{array}{} S_i, & 0\le i<l & ①\\ 2S_{l-1}-S_i, & l\le i\le r & ② \\ S_i-S_n, & r<i\le n & ③\\ \end{array} \right. \]

将上述前缀和 \(\ge 0\) 分别称为条件 ①②③。

我们定义前、后缀和合法(注意后缀和还需要将左右括号取反),当且仅当全部 \(\ge 0\),那么一个括号序列合法,当且仅当前后缀和都合法。

分类讨论 \(T'\) 的前后缀和的情况。

1.前后缀和均和法

只需进行一个朴素的 dp 即可 \(O(n^2)\) 求出答案。

2.一侧合法,一侧不合法

不妨设前缀和不合法,对于后缀和不合法的情况可以将原序列反转后再求一遍。

因为后缀和合法,因此 \(S_i-S_n\ge 0\Longleftrightarrow S_n\le S_i\),所以 \(S_n\le 0\)

条件 ③ 天然满足。

\(A\) 为第一个前缀和为 \(-1\) 的位置之前的最大值,\(B\)\(S_n\)

条件 ① 要求 \(l\) 要在所有 \(-1\) 之前,根据条件 ②, \(S_{l-1}\) 要尽量大,因此自然是取 \(A\) 作为 \(S_{l-1}\) 最优,然后取其后第一个 \(S_r=A+\dfrac B 2\) 的位置作为 \(r\),要求 \([l,r]\) 内前缀和均 \(\le 2A\)

考虑枚举第一个 \(-1\) 的位置,记为 \(p\),分别计算左右两侧的方案数。

左侧比较简单,令 \(f_{i,j,k}\) 表示前 \(i\) 个括号,前缀和为 \(j\),前缀和最大值为 \(k\) 的方案数,直接 dp。

考虑右侧如何计算,若 \(A+\dfrac B 2\ge 0\),那么 \(r<p\)\([l,r]\) 内也一定 \(\le 2A\),因此条件全部满足,直接计数即可,否则,需要 \(p\) 右边存在一个合法的 \(r\),即 \([p,r]\) 内前缀和均 \(\le 2A\)。考虑将 \(p\) 后面的前缀和减去 \(B\),则要求:

  • \(S'_n=0,S'_p=-1-B\)
  • \(\forall i\in [p,r],S'_i\le 2A-B=2(A-\dfrac B 2)\)

枚举 \(A-\dfrac B 2\),即 \(S'_r\),令 \(g_{i,j,0/1}\) 表示后 \(i\) 个括号,前缀和为 \(j\),是否出现过 \(S'_r\),转移细节见代码。

3.前后缀和均不合法

\(A\) 为第一个 \(-1\) 之前的最大值,\(B\)\(S_n\)\(C\) 为最后一次 \(B-1\) 之后的最大值。

首先,\(A\) 的位置在 \(C\) 左边,证明显然。

那么,不妨设 \(A+\dfrac B 2\le C\),否则依然可以将序列反转后再求一遍(但是注意不要把 \(A+\dfrac B 2=C\) 的部分算重)。

\(l-1\)\(A\) 的位置,\(r\) 为最后一次 \(B-1\) 之后第一个 \(A+\dfrac B 2\),这样条件 ①③ 都已满足。

枚举第一个 \(-1\) 的位置 \(p\),左侧同上,右侧同样将最后一次 \(B-1\) 之后的前缀和减去 \(B\),则要求:

  • \(S'_n=0,S'_p=-1-B\)
  • \(\forall i\in[p,r],S'_i\le 2A-B=2(A-\dfrac B 2)\)

枚举 \(A-\dfrac B 2\),即 \(S'_r\),令 \(g_{i,j,0/1/2}\) 表示后 \(i\) 个括号,前缀和为 \(j\),处于第 \(k\) 段的方案数,\(k=0\) 表示 \([r +1,n]\)\(k=1\) 表示 \([q+1,r]\)\(k=2\) 表示 \([p,q]\),其中 \(q\) 是最后一个 \(-1\) 的位置。

时间复杂度 \(O(n^3)\),期望得分 \(100\) 分。

posted @ 2023-06-08 21:22  Acestar  阅读(22)  评论(0)    收藏  举报