Codeforces Round #582 (Div. 3) 解题记录

D

  • 题意: 给出一个序列\(a\),每个操作可以将\(a_i := \lfloor\frac{a_i}{2}\rfloor\),问最少几次操作获得\(k\)个相同的\(a_i\)
  • 思路: 将每个\(a_i\)都降为0,并在变化过程中加入到vector(相同大小,变化次数不同)中,这样每个数就会产生\(log(n)\)个数,操作完后枚举每个vector,sort后求其前k项和(若不到k项则不计算),最小的即为答案

E

  • 题意: 给两个长度为2的字符串s1,s2(只包含'a','b','c'),让你构造长度为\(3n\)的字符串,'a','b','c'均出现n次且子串里不能有s1,s2
  • 思路: 答案串必定是"abc"的一个排列重复n次或,按这个排列的顺序让'a','b','c'重复n次,枚举出所有的答案串再判断即可.

F

  • 题意: 给出两个序列\(p,q\),让你构造出一个长度为n的字符串s,使得\(s[p_i] \le s[p_{i + 1}]\),\(s[q_i] \le s[q_{i + 1}]\),且最少出现k个不同的小写字母.
  • 思路: 我们把\(\le\)看做是前驱关系,构造出有向图,跑tarjan,一个强联通分量必须为一个字母

G

  • 题意: 给出一个带权树和一系列询问,问有多少对点,使得简单路径上的最大权值不超过w.
  • 思路: 用并查集维护每个点经过边不大于\(w\)所能到达的集合,从小到大排序边和询问,对每个询问,我们对小于该询问的边进行操作,如果边的两端\(u,v\)不在一个集合,对其进行合并,对答案的贡献为\(\binom{size[u]+size[v]}{2}-\binom{size[u]}{2}-\binom{size[v]}{2}\)(集合内的点,两两相互可达)

猜你喜欢

转载自www.cnblogs.com/xxrlz/p/11442986.html