Educational Codeforces Round 100 (Rated for Div. 2) 题解(A-E)

AC代码

A. Dungeon

记每7次攻击为一轮,那么如果要满足给定条件,那么必须要有$a + b + c = 0 \text{ mod 9} $。

其次,假设结束时经历了\(t = \frac{a + b + c}{9}\)轮,则必须要有\(t \ge min(a, b, c)\)

满足以上两个要求则YES,否则NO。

B. Find The Array

挺有意思的一道构造题。

构造方法1

首先要注意到1是可以被任何数整除的。根据这个性质,就可以每隔1个位置就放一个1,这样构造必定可以满足条件2。

剩下的位置为了最小化条件3中的\(\sum_i^n |a_i - b_i|\),就令\(b_i = a_i\)。这样构造还保证了满足条件1。

这样一来,可以生成两种\(b\)\([1, a_2, 1, a_4, ...]\)\([a_1, 1, a_3, 1, ...]\)。记前者为\(b1\),后者为\(b2\)

那么有:

\[S_1 = \sum_{i = 1}^n |a_i - b1_i|\\S_2 = \sum_{i = 1}^n |a_i - b2_i|\\S_1 + S_2 = \sum_{i = 1}^n (a_i - 1) = S - n \]

由此可以得出:\(2 \cdot S_1 \le S\)\(2 \cdot S_2 \le S\)中必有一个成立(可以用反正法证明)。

这样条件3也满足了。

构造方法2

\(k\)为使\(2^k < a_i\)成立的最大的\(k\),可以让\(b_i\)等于\(2^k\)\(2^{k+1}\)中离\(a_i\)更近的那个。

这样,就有\(|a_i - b_i| \le 2^{k - 1} \le \frac{a_i}{2}\),从而满足题目所给条件。

C. Busy Robot

这题就是一道模拟,有一说一没那么好写。

如果机器人正在执行某个命令,那么执行这个命令的开始时间\(st\),结束时间\(ed\),起点\(cur\)和重点\(nxt\)都算是已知。

  • 依次执行命令
    • 如果\(t_i \ge ed\)那么这个命令是有效的
      • \(st = t_i\)
      • 结束时间等于当前时间加上路程除以时间,即\(ed = t_i + abs(x_i - cur)\)
      • \(cur = nxt\)
      • \(nxt = x_i\)
    • 判断当前命令是否成功
      • \([t_i, t_{i+1}]\)这段时间能走过的点构成的区间\([l, r]\)是可以求出来的
      • 然后判断\(x_i\)是否在这个区间内就可以了

注意,这道题要用64位整型。如果使用32位整型,那么如果\(t_n = 10^9\)且此时刻位于\(10^9\),且\(x_n = -10^9\),这样就算令\(t_{n+1} = 2^{32} - 1\),也会令程序误判最后一道指令为不成功。

D. Pairs

如果要得出\(b\)至少要使用\(need\_ma\)次取最大和\(need\_mi\)次取最小,那么剩下的次数就是任意可用的,而总共有\(n + 1\)种可能取值,所以满足条件的取值就等于\(n + 1 - need\_ma - need\_mi\)

现在只需要求出\(need\_mi\)\(need\_ma\)。以下以\(need\_mi\)为例:

  • 因为\(b\)是升序排序的,所以从左至右遍历\(b\),令\(delta\)为未被使用的数。
    • \((b_{i - 1}, b_i)\)之间的数以及前面未被使用的数,这些都可以用来作为取最大值的令一个参数,和\(b_i\)一起使用而得出\(b\)。即\(delta += b_i - b_{i - 1} - 1\)
    • 如果当前没有可以用来作为取最大的的参数,则必须要使用一次取最小操作。即\(need\_ma =need\_ma + 1\)
    • 否则,则消耗一个未被使用的数。即\(delta = delta - 1\)

同理可以求解\(need\_ma\)

E. Plan of Lectures

这题很容易就能想到是拓扑排序

根据题目条件可以得出有向边\((p[i], i)\)构成的图是一颗树,其次\((x_i, y_i)\)构成多条链或者环。

为了满足\(y_i\)接在\(x_i\)之后,可以将一条链上的点都缩到一个点上,遇到链首,就把整条链都加进答案,那么这道题就可以转化为经典拓扑排序。

posted @ 2020-12-18 01:23  _Backl1ght  阅读(117)  评论(0编辑  收藏  举报