Codeforces Round #494 (Div. 3)

ABC咕咕咕

D. Coins and Queries

题意:有 \(n\) 个数 \(a_i=2^k (k\in \{0,1,2\cdots 30\})\)\(q\) 次询问某个数 \(x\) 最少要几个能凑出来。

\(n,q \leq 2\times 10^5\)

题解:

处理出每种 \(a_i\) 的个数。

每次贪心选小于 \(x\) 的最大的。

\(O(n+q\log a_i)\)

E. Tree Constructing

题意:构造一个 \(n\) 个点,每个点度数不超过 \(k\),直径恰好为 \(d\) 的树。

\(n \leq 4\times 10^5\)

题解:

先把直径造出来。

每个点连深度为到直径两端的距离的完全 \(k-2\) 叉树。

点用完了为止。

\(O(n)\)

F. Abbreviation

题意:有一个 \(n\) 个单词的文章,可以把某个 出现过至少两次单词段 替换成它们的首字母 连起来。替换之后不能再替换。问最终最小长度。

(如 a aaa aa a bbbbb aaa aa a a -> a AAA bbbbb AAA a)

\(n\leq 300\),单词总长度 \(\leq 10^5\)

题解:

先把单词两两的相等关系预处理出来。

然后枚举被替换的串。

暴力算答案。(常数非常小,或者可以 kmp/哈希/map)

\(O(n^4+n\sum |s|)\)

posted @ 2020-09-10 23:26  daduda  阅读(87)  评论(0)    收藏  举报