Loading

解题报告【Codeforces Global Round 21】

Codeforces Global Round 21

A

赛时没看题,观察发现是 \(z\) 按位或上任意 \(a_i\) 的最大值。

B

首先可以将整个序列操作两次,即答案最多为 \(2\),其次若只有一段非 \(0\) 段则答案为 \(1\)

C

模拟,将两个序列里的数都分解完再对比即可。

D

首先发现不可能往回走,若 \(a_i \to a_k \to a_j ~ (i < j < k)\),那么 \(a_j\) 既不是三者的最大值也不是最小值,显然没有 \(a_i\)\(a_k\) 优。

定义 \(f[i]\) 为到 \(i\) 的最短步数,考虑状态转移,先找出在 \(i\) 前比 \(a_i\) 大的第一个数 \(j\) 和比 a_i 小的第一个数 \(k\),在 \((j, i]\) 之中 \(i\) 是最大的,那么 \(i\) 可以作为区间的最大值,向前满足单调递减的下标都可以与 \(i\) 组成区间,\(i\) 作为最小值同理。

发现这些东西维护单调和最值可以用两个单调栈维护,转移可以用线段树维护,时间复杂度 \(\mathcal O(n \log n)\)

似乎有一个线性做法,先咕了。

E

放在 E 是搞笑的?

观察一下就能发现到达 \((i, j)\) 的 doll 数为 \(\binom {i + j} j\),即为点的权值。

要算所有点的权值和可以枚举每一行,发现一行的权值和即为 \(\binom {i + a_i + 1} {i + 1}\)

F

啊,这个 F 啊,我无话可说啊。

看起来直接构造,比较难,但是

cmll02:做法不都写在题面上了吗?

考虑如果有解,那么一棵树的所有相邻的边 \((i, k), (j, k)\) 在数据中一定是 \(1\)

那么考虑将所有 \((i, k), (j, k)\)\(1\) 的两条边并成一个联通块缩起来。

如果有解,必然存在一个连通块大小是 \(n - 1\)(不含多余的边),且里面的边符合题目给定的限制且能构成一棵树。

暴力判一判就过了?

我的评价是,好怪啊???

posted @ 2022-07-16 09:10  RedreamMer  阅读(63)  评论(0编辑  收藏  举报