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)\)

posted @ 2020-05-19 11:53  daduda  阅读(134)  评论(0)    收藏  举报