CF Round #530 Div2

A.

尛你 \(\%\%\%\)

B.

题意:你需要在平面上画 \(n(n \le 10 ^ 9)\)\(1 \times 1\) 的正方形,且顶点都在整点上,每次可以画一条长度为 \(1\) 的线段,画过的线段可以新生成一条并且可以平移(跟原线段构成矩形的对边)且不算画的数量,问最少需要画多少次。

首先我们发现我们画的线段数量其实是整个大图形的水平宽度加长度,那么根据均值不等式画的越正越优,因此我们从一个正方体开始不断往上累加拼成大正方体这样一定最优,打个表发现答案应该是 \(2 \ 3 \ 4 \ 4 \ 5 \ 5 \ 6 \ 6 \ 6 \ 7 \ 7 \ 7 \ 8 \ 8 \ 8 \ 8 \cdots\) 不难发现相同答案的长度从 \(1\) 开始一次递增每次加一,并且每段重复两边,于是可以使用等差数列求和直接输出答案了。

C.

题意:给你一串长度为 \(n(n \le 200)\) 的字符串,由小写字母,\(*\)\(?\) 组成,保证每个 \(*, ?\) 之前都有一个小写字母。给定一个 \(k\) 你需要构造一个长度为 \(k\) 的字符串,满足下列条件:

如果在原序列中后面没有 \(*, ?\) 那么这个字符必须留下来。

\(*\) 前的字符可以留下也可以不留下,或者能重复若干次写入你构造的序列。

\(?\) 前的字符可以留下也可以不留下。

首先我们判断不合法的情况,如果必须保留的字母数量大于 \(k\) 显然不可能,如果没有 \(*\) 且字母数量小于 \(k\) 显然不可能。剩下的情况我们直接把 \(?\) 前面的字母全不加进来,随意选一个 \(*\) 之前的字母重复放入知道满足条件即可。

D.

题意:给定一颗大小为 \(n(n \le 10 ^ 5)\) 的树,每个点有非负点权,我们定义一个点的 \(s_u\)\(u\) 到根节点的点权之和。现在你只知道奇数层的 \(s_u\),需要你构造出每个点的点权满足条件且所有点点权和最小。

首先判断不合法的情况,对于任意一个点 \(u\) 如果在 \(u\) 的子树内存在一点 \(v\) 满足 \(s_v > s_u\) 那么显然不合法。接下来我们有一个贪心,每个不确定的点放点权为 \(0\) 但这样是错的,因为我们越往上放点权所需要的花费最小,那么我们就只需要把能往上放的点权尽可能往上放即可,即对每个不确定的点 \(u\)\(\min{s_v - s_{fa}}, v, fa\)\(u\) 的儿子和父亲,对每个确定的点放 \(s_u - s_{fa}\) 就一定可以保证答案最小。

E.

题意:给你一个 \(n \times m(n \times m \le 3 \times 10 ^ 5)\) 的矩阵,由 \(A, G, C, T\) 组成,现在问你最少需要改变多少个位置,使得每个 \(2 \times 2\) 的矩阵中都恰好包含 \(A, G, C, T\) 四种字符。

首先我们假设确定了左上角一个 \(3 \times 2\) 的矩阵,那么我们就能把整个矩阵推出来,显然我们直接暴力枚举这个 \(3 \times 2\) 的矩阵就可以做了,但还可以跑得更快,只需要枚举左上角 \(2 \times 2\) 的矩阵,那么第三行的前两个元素就一定和第一行的前两个元素相同,这样枚举的复杂度可以降到 \(4! \times 2 = 48\)。注意特判 \(n = 2\) 的情况。

F.

题意:给你一颗大小为 \(n(n \le 10 ^ 5)\) 的有根树,每个节点上有一些饼干,第 \(i\) 个节点上有 \(x_i\) 块饼干,小 \(A\) 在第 \(i\) 个节点上吃一块饼干需要花费 \(t_i\) 的时间。现在小 \(S\) 想阻止小 \(A\) 继续吃饼干,最开始小 \(A\)\(1\) 号点,每次小 \(A\) 可以往当前点的任意一个儿子走,接着小 \(S\) 会摧毁当前小 \(A\) 所在节点和一个儿子之间的连边。最终小 \(A\) 可以选择在任意一个点停下,她会沿着先前的路径回到 \(1\) 号点并吃掉一些饼干,要求小 \(A\) 走到一个点,回去,吃饼干的总时间不超过 \(T\) 问小 \(A\) 最终最多能吃到多少饼干。小 \(A\) 和小 \(S\) 每次都会进行当前的最优操作。

首先小 \(A\),小 \(S\) 都会进行最优操作,那么小 \(S\) 一定会找到一个最优的儿子然后把边删掉,那么小 \(A\) 每次就只能选择次优的儿子。那么我们可以直接 \(dp\),令 \(dp_i\) 为在 \(i\) 子树内的点包括 \(i\) 停止返回能吃到的最多饼干。那么每次我们就直接从儿子的最大值转移即可,而到点 \(i\) 直接折返的答案我们显然可以直接贪心吃这条路径上花费时间最小的饼干,这个答案可以使用权值线段树二分来做。最终答案就是 \(dp_1\),要注意的是小 \(A\) 是先手,那么在 \(1\) 号点一定会往最优的儿子走。

posted @ 2020-09-16 17:18  Achtoria  阅读(134)  评论(0编辑  收藏  举报