Codeforces Round #617 (Div.3)
A. Array with Odd Sum
略
B. Food Buying
略
C. Yet Another Walking Robot
Solution
用 STL
的 map
记录上一次到达该位置的时间即可。
Code
1 |
|
D. Fight with Monsters
Solution
对于每个怪物都能 $O(1)$ 地获知要得分需要用多少次技能,根据技能消耗数从小到大依次取即可。
Code
1 |
|
E1. String Coloring (easy version)
Solution #1
首先有结论:只需所有逆序对的颜色不同即可,因为易知存在一种排序方式只交换逆序对。
于是我们可以给所有逆序对两两连边建图,然后二染色即可。
复杂度 $O(n^2)$
Solution #2
进一步思考,每个元素的颜色只需与在它之前出现的且大于它的所有元素的颜色不同即可。所以我们可以从颜色的角度出发,记录每个颜色染到的元素最大值,那么循环每个元素,若能染色为0,染为0;否则若能染色为1,染为1;否则无解。
复杂度 $O(n)$
Code —- $O(n^2)$
1 |
|
Code —- $O(n)$
1 |
|
E2. String Coloring (hard version)
Solution
沿袭 E1 的 Solution #2 的思路,只不过 E2 的颜色数增加了而已,于是我们可以以颜色为下标建立线段树,像值域线段树那样查找最小的值不比当前元素大的颜色。
复杂度 $O(n\lg n)$
Code
1 |
|
F. Berland Beauty
Solution
根据 $g_i$ 的值从大到小排序,依次拿到路径上赋值,一条边的值为当前值和 $g_i$ 的最大值,赋值结束后还没值的边赋为1e6,随后把所有条件验证一遍,验证不过输出 -1
,验证通过输出答案。
复杂度 $O(n^2)$
Code
1 |
|
Codeforces Round #617 (Div.3)
http://xyfjason.github.io/blog-xcpc/2020/02/05/Codeforces-Round-617-Div-3/