Codeforces Global Round 15

A. Subsequence Permutation

排序。

B. Running for Gold

简单比较。

C. Maximize the Intersections

贪心让左半边依次和右半边匹配。

D. Array Differentiation

把每个 $a_i=b_j-b_k$ 看作边 $(j, k)$,既然有 $n$ 条边,那么肯定至少有一个环,$O(2^n)$ 枚举环上元素了之后枚举哪些是正数哪些是负数,看是否能取到 $0$。如果能取到则有解,否则无解。复杂度 $O(3^nn)$。

E. Colors and Intervals

$leftlceil frac{n}{k - 1} ight ceil$ 引导我们往抽屉原理想。考虑每 $k-1$ 个颜色放在一组做,如果能保证这一组不存在重复元素就可以了。具体方法是:每次取出第二次出现位置最早的颜色,作为这个颜色的区间,然后其他颜色同时剥去第一次出现位置,正确性显然。

F. Telepanting

如果人经过了 $x_i$ 而不被传送,那么意味着 $x_{1..i}$ 都已经是开着了的。考虑 $f(i)$ 表示当人经过 $x_i$ 并被传送的时候,要经过多长时间才能再次到达 $x_i$(并不被传送)。设 $j$ 的最小的满足 $x_j>y_i$ 的下标,那么 $f(i)=x_i-y_i+f(j)+...+f(i-1)$,前缀和优化转移即可。最终计算答案的时候,只需要把所有初始开着的传送门的 $f(i)$ 加起来,再加上 $x_n+1$ 即可。

G. A Serious Referee

根据排序网络的结论,一个算法能排好序当且仅当任意的 01 串都能排好序。那么我们考虑搜索所有的 01 串。如果在前 $i$ 个操作进行完了之后,只接触到了 $S_i$ 集合内的位置,那么我们在搜到 $i$ 的时候,也只需要考虑 $S_i$ 集合内的 01 情况。更进一步,假设 $T_i=S_isetminus S_{i-1}$,我们只需要考虑 $T_i$ 集合内有几个 0 几个 1 就好了,因为在第 $i$ 个操作进行的时候,$T_i$ 集合必然会被排序,所以这里面 01 的具体顺序就不需要考虑了。

分析一下复杂度:$prod_{i=1}^{k}(|T_i|+1)leq left(frac{n + k}{k} ight)^k$。在维护 01 串的时候使用位运算,就可以保证复杂度比较低。

注意特判 $n=1$ 的情况,和 $S_k eq [1,n]$ 的情况。

H. Guess the Perimeter

好牛逼啊。复制题解人来了。

设矩形的宽为 $w$,长为 $h$。

首先问一下所有的点组成的集合,答案就是 $(w+1)(h+1)$。

考虑问这样的集合:${(di, j)|1leq ileq lfloor 200/d floor, 1leq jleq 200}$,设其结果为 $f(d)$。

然后注意到 $d imes f(d)=f(1)$ 当且仅当 $d|(w+1)$。

接下来考虑使用 2 的次幂。设 $k$ 为 $w+1$ 的质因子 2 的个数,$p=2^k$。那么 $left|2f(2p)-frac{f(1)}{p} ight|=h+1$。

于是我们只要二分出满足条件的 $k$ 即可,集合大小只有 ${1,2,2^2,...,2^7}$,所以只需要 $3$ 次就能二分出来了。带上一开始的那次就是 $4$ 次。

I. Organizing a Music Festival

虽然这是最后一题,但确实很套路、很模板。

看到这种指定一个集合要连续的问题,不难想到 PQ tree。

PQ tree 的节点包含 P 点和 Q 点,P 点要求儿子可以以任意顺序排列,Q 点要求儿子必须以正序或倒序排列。

然后插入一个集合的时候,就是一车分类讨论了,我好像也描述不清,不如看看别人的博客怎么讲(逃)。

最后求答案是很简单的,只要在树上根据这个点是 P 还是 Q 乘以一个贡献即可。

原文地址:https://www.cnblogs.com/Master-Yoda/p/15124439.html