Codeforces Global Round 11/Codeforces1427 ABCDE

AC代码

A. Avoiding Zero

\(sum_i = \sum_{j=1}^i a_i\)。易得\(sum_n\)为定值,故若\(sum_n = 0\),则无解。

\(sum_n < 0\),将\(a\)升序排序后作为\(b\),此时\(sum_i\)先降后升,最大值在\(sum_1\)处或\(sum_n\)处取到,这两个值都小于零,所以必定不会存在\(sum_i = 0\)的点。

同理,若\(sum_n > 0\),此时将\(a\)降序排序后作为\(b\)

B. Chess Cheater

遍历字符串,统计胜场数,败场数和初始分数\(score\)

特判\(k = 0\)和作弊后可以全胜的情况。

若全败,则消耗一个\(k\)且加一分后转移到只有一个胜场的情况。

若只有一个胜场,那么就只修改和胜场相邻的败场,每次修改固定加两分,即\(score = socre + 2k\)

若胜场数大于等于二,那么对于有败场隔开的两个胜场,记中间有\(x\)场败场,则将这\(x\)场全都改为胜场后可以加\(2x + 1\)分。优先填\(x\)较小的败场。

C. The Hard Work of Paparazzi

早年涛爷出了道弹钢琴,和这题很像,就是空间范围是1*12。然后最近几天我自己想着出题,就想着把之前涛爷那道题给他扩展到二维,大概\(r = 5\),题目背景本来已经想好了用DOTA2暂停的时候打米波小游戏(就是打地鼠),现在看来已经不需要了。

\(dp_i\)表示只考虑前\(i\)个点,并且在\(i\)处拍照的答案。

\(dp_i\)可以从\(dp_j\)转移过来,其中\(1 \le j \le i - 1\)。如果\(t_i - t_j \ge 2r\),那么必定可以从\(j\)点转移到\(i\);否则就需要判断曼哈顿距离是否小于等于\(t_i - t_j\)

因为\(t_i < t_{i+1}\),所以至多枚举\(2r\)个需要判断曼哈顿距离的点,再往前的点就一个前缀最大值解决了。

复杂度为\(O(2rn)\),足够优秀。

D. Unshuffling a Deck

想到构造方法后,就是简单模拟了。

\(n\)为奇数的时候,先找到\(n\)的位置,然后通过至多一个操作让\(c_n = n\)

然后找到\(n - 1\)的位置,通过一个操作让\(c_1 = n, c_2 = n - 1\)

然后找到\(n - 2\)的位置,通过一个操作让\(c_n = n, c_{n - 1} = n - 1, c_{n - 2} = n - 2\)

然后找到\(n - 3\)的位置,通过一个操作让\(c_1 = n, c_2 = n - 1, c_3 = n - 2, c_4 = n - 3\)

以此类推,每次操作让一个数字移动到对应的位置,至多\(n\)次操作过后,\(c_i = i\)就会满足了。

\(n\)为偶数的时候,上述方法会使\(c_i = n - i + 1\)。这个时候稍微改改,先将\(1\)移动到数组末尾,然后让前两个数为\(1, 2\),然后让后三个数为\(3, 2, 1\),以此类推。

E. Xum

zfc说是线性基,然而我不会线性基。

看了官方题解,自己写了个括欧的解法。

首先,如果可以构造出来一个和\(x\)互素的数字\(y\),这样子就可以根据裴蜀定理得到存在\(a,b \ge 0\)\(b\)为偶数,使\(ax - by = gcd(x, y) = 1\)成立,并且\(a\)\(b\)的通解可以用扩展欧几里得算法得到。此时,\(by\)为偶数,有\(ax \oplus by = 1\),故若得到了\(ax\)\(by\),就可以通过异或得到1。

然后,\(ax\)其实可以看成\(\sum a_i 2^ix\),其中\(2^ix\)可以通过加法得到,所以\(ax\)也可以通过加法得到。同理已有\(y\)的情况下也可以通过加法得到\(by\)

现在就只需要构造出和\(x\)互素的\(y\)了。令\(e\)为满足\(2^e \le x\)的最大自然数,因为\(x\)为奇数,所以\((2^ex) \& x = 2^e\)\(y = (2^ex) \oplus x = (2^e + 1)x - 2 ^{e + 1}\)\(x\)互素。

posted @ 2020-10-11 02:54  _Backl1ght  阅读(284)  评论(0编辑  收藏  举报