Codeforces Round #486 (Div. 3)
_vb92xHWx8zQTc_34
A. Diverse Team
题意:从 \(n\) 个数里选出 \(k\) 个不同的,构造方案,无解输出-1。
\(n,k,a_i \leq 100\)
题解:开个桶,扫一遍
\(O(n)\)
B. Substrings Sort
题意:给 \(n\) 个字符串,问能不能重排后使得所有 \(i\in [i,n-1]\) 满足第 \(i\) 个是第 \(i+1\) 个的子串
\(n,length \leq 100\)
题解:按长度排序,判断一下就好了
\(O(n\log n+\sum length)\)
C. Equal Sums
题意:给 \(k\) 个序列,问是否存在两个序列使得各删掉恰好一个元素之后和相等。
\(k \leq 2\times 10^5\),\(\sum n \leq 2 \times 10^5\)
题解:把所有和拿map存一下
\(O(\sum n \log n)\)
D. Points and Powers of Two
题意:有 \(n\) 个不同的整数,求最大的一个子集使得两两之差都是 \(2^k\)。
\(n \leq 2 \times 10^5\)
题解:
首先发现选出集合的大小 \(<4\)。
因为如果 \(\geq 4\),可以选出 \(4\) 个数 \(a,a+2^x,a+2^x+2^y,a+2^x+2^y+2^z\),则 \(2^x+2^y\) 和 \(2^y+2^z\) 均可以表示成 \(2^k\),所以 \(x=y=z\),所以 \(2^x+2^y+2^z\) 不能被表示成\(2^k\),矛盾。
如果是 \(3\) 个数,一定是长度为 \(3\),公差为 \(2^k\) 的等差数列,枚举首项和公差,拿 map 判一下存不存在。
\(2\) 个数也随便拿 map 判一下,一个数就随便选就好了。
\(O(n\log n\log a)\)
E. Divisibility by 25
题意:有一个正整数 \(n\),每次操作可以交换两个相邻位上的数字,求变成 \(25\) 的倍数需要的最小次数,无解输出 -1,要求交换过程中首位不能为 \(0\)。
\(n \leq 10^{18}\)
题解:
分类讨论
发现末尾只能是 \(00\),\(25\),\(50\),\(75\)。
如果末尾是 \(00\),就把最靠后的两个零分别移到倒数第二个位置和最后一个位置。
如果末尾是 \(50\),把最后一个 \(0\) 移到最后一个位置再把最后一个 \(5\) 移到倒数第二个位置。(如果末尾是 \(5\) 就不用管它了)
如果末尾是 \(25\),把最后一个 \(5\) 移到最后一个位置再把最后一个 \(2\) 移到倒数第二个位置,如果 \(2,5\) 是首位且第二位是 \(0\) 要特判,把第二个非零位移到第二位。
\(75\) 和 \(25\) 同理。
时间复杂度 \(O(\log n)\)
F. Rain and Umbrellas
题意: 有一个数轴 \(1-n\) ,有些地方必须拿伞才能过去,某些地方有伞,伞有重量,随时可以把伞扔掉,求每一时刻伞重量和最小值。
\(n \leq 2000\),重量 \(\leq 10^5\)。
题解: \(dp_{i,j}\) 表示现在到了 \(i\),拿的伞重量为 \(j\) 的最小重量和,枚举这个点要不要拿伞,要不要扔,要不要换,直接 \(dp\) 即可。
\(O(n^2)\)
浙公网安备 33010602011771号