- Codeforces Round 1051 (Div. 2)
- A. All Lengths Subtraction
- B. Discounts
- C. Max Tree
- D. Inversion Graph Coloring Easy Version/Hard Version
- E. Make Good
Codeforces Round 1051 (Div. 2)
貴方が何様なんだとしても
救いの亡い莫迦だったとしても
千断れそうな賽の様な
“愛”を 求めてしまったんだ
『この糸は己の意図だ!』と
叫んで断れた雲の異図 ああ
僕は其れに縋る事さえ
出来無かった訳ですから
A. All Lengths Subtraction
将过程倒置,要求在任意时刻的最小值在两端上。code.
B. Discounts
贪心,尽可能让价格大的免费。code.
C. Max Tree
对于 \((u, v)\) ,如果 \(x < y\),令 \(u \rightarrow v\),反之 \(v \rightarrow u\),这会构成一张 DAG。
进行拓扑排序,越前的节点应该越小。code.
D. Inversion Graph Coloring Easy Version/Hard Version
题目要求 LDS 长度不超过 \(2\) 的子序列。
为保证 LDS 长度不超过 \(2\) ,需要记录 LDS 末值。同时由于 LDS 可能变化,需要记录最大值。设计状态 \(f(i, j)\) 表示当前序列最大值为 \(i\),LDS 末为 \(j\) 的状态的方案数。
考虑当前转移到第 \(i\) 位,\(f(x, y)\) 如何转移:
-
不选 \(a_i\),\(f\) 不变。
-
\(y > a_i\) ,不能选。
-
\(x > a_i > y, f(x, a_i) \leftarrow f(x, y)\)。
-
\(a_i > x, f(a_i, y)\leftarrow f(x, y)\)。
故有
暴力转移 \(\mathcal{O}(n^3)\),可用树状数组优化,时间复杂度 \(\mathcal{O}(n^2\log n)\)。code
E. Make Good
对于两个相同的字符发生反转,有经典的想法,将偶数位上的字符反转,这样操作就变为交换两个相邻的不同字符了。
由于两个相同字符交换没有区别,故可以认为字符间可以任意交换。
这样,只需能要构造出形如 ()))...)(((...
的字符串即满足题意。
显然,反转后 (
和 )
的个数都应该是偶数。code