Codeforces Round 888 VP 记
A
题意:给定 $ H $ 和 $ n $ 个 $ h_i $,以及 $ k,m $ 求 $ \sum [| H - h_i | \ge k][ | H - h_i | \bmod k = 0 ][ \frac{| H - h_i |}{k} < m] $ 的值。
小丑题,注意特判。
B
题意:给定长度为 $ n $ 序列 $ a $,可以进行无限次操作,每次操作可以交换原序列中两个奇偶性相同的数,询问是否能将原序列升序排序。
小丑题。
注意到无论操作多少次,原序列是 奇数/偶数 的位置依然是 奇数/偶数,操作实际上就是把所有奇数排序,所有偶数排序。那就可以先将原序列排序,再与原序列比较。设排序后数组为 $ b $。若存在一组 $ a_i , b_i $ 奇偶性不同,则不存在合法操作,反之则存在。
C
题意:
Vlad记得他有一系列 n 个瓷砖和一个数字 k。瓷砖从左到右编号,第 i 个瓷砖的颜色为 ci。
如果你站在第一块瓷砖上,开始向右跳任意数量的瓷砖,你可以得到一条长度为 p 的路径,
路径的长度就是你经过瓷砖的数量。
弗拉德想看看是否有可能得到一条长度为 p 的路径,使得:
1.它在索引为n的瓦片处结束;p能被k整除;
2.路径被分成长度正好为k的块;
3.每个区块中的瓷砖具有相同的颜色,相邻区块中的颜色不一定不同。
写到一半写不下去了,于是用的机翻。
小丑贪心题。
考虑最短路径怎么走:显然是 $ c_1 $ 为一个长度为 $ k $ 的区间左端点,$ c_n $ 为一个长度为 $ k $ 的区间的右端点,最短路径只有这一个或两个区间(因为有 $ c_1 = c_n $ 的情况)。
直接判定最短的路径是否存在即可,因为如果最短的路径不存在,长的路径更不可能存在。
D
题意:
你的朋友有一个n个元素的数组,计算它的前缀和数组并传递给你,
在传递过程中不小心丢失了一个元素。
你的任务是找出给定的数组是否能匹配 1~n 的一个排列。
小丑题。
把数组差分一下,记录已经出现了 $ 1 \sim n $ 排列中的哪些数。若在记录中发现差分出来的数大于 $ n $,或之前已经差分过这个数,就记录下大小。
统计完后,扫一遍桶,找出出现次数为 0 的两个数(前缀和少一个元素,原数组少两个元素并增加一个元素等于两个元素和),判断这两个数相加是否为上一步找出来的数即可。
注意特判注意特判注意特判注意特判注意特判注意特判注意特判注意特判注意特判注意特判注意特判注意特判注意特判注意特判注意特判注意特判注意特判注意特判注意特判注意特判注意特判注意特判注意特判注意特判注意特判注意特判
E
拓扑排序好题
题意:
炼金术士纳斯蒂亚喜欢混合药剂。
商店总共有 n 种药剂,第 i 型药剂 c_i 元。
所有药剂都只能通过混合其他几种药剂获得。
混合过程中使用的药水会被消耗掉。
此外,没有药剂可以通过一个或多个混合过程从自身获得(无法自己合成自己)。
作为一名经验丰富的炼金术士,纳斯提亚 k 种无限药剂 p1,p2,…,pk,
但是她不知道她下一步想得到哪一个。
为了决定,她要求你找出,对于每个 1≤i≤n,她需要花费的最少硬币数来获得 i 类药剂。
对于第 $ i $ 类药剂,将它的原材料向它连一条边。
设 $ f_i $ 为第 $ i $ 类药剂所需最小价钱,容易得到:
$$ f_i = \min\{\sum{f_u},c_i \} $$
然后拓扑排序就行了。
对于无限药剂的处理,将其商店价钱改为 0 即可。
F
题意:
给定 $ n $ 个数的序列 $ a $,和一个数 $ k $,求 $ i,j \in [1,n],i \ne j $ 和 $ x \in [0, 2^k] $,使得 $ (a_i \oplus x) \& (a_j \oplus x) $ 最大,其中 $ \oplus $ 为异或符号,$ \& $ 为按位与符号。
01trie 好题。
考虑已经插入 $ a_1 \sim a_{p-1} $,如何找到 $ j=p $ 时使答案最大的 $ i $ 和 $ x $。
显然可以从二进制高位向低位贪心。
考虑单独的二进制位对答案的影响:
| $ a_i $ | $ a_j $ | $ x $ | $ (a_i \oplus x) \& (a_j \oplus x) $ |
|---|---|---|---|
| 1 | 1 | 0 | 1 |
| 0 | 0 | 1 | 1 |
| 0 | 1 | 0/1 | 0 |
| 1 | 0 | 0/1 | 0 |
(上图列出了使 $ (a_i \oplus x) \& (a_j \oplus x) $ 最大的 x 取值)
于是发现在 trie 上每位贪心地选与当前位相同的数即可。
G
挖坑

浙公网安备 33010602011771号