2020-2021:teams:farmer_john:2sozx:codeforces_round_646_div._2
A
B
题意:给定一个 $0/1$ 序列,每次可以翻转一个位置的 $0/1$ 要求最后的序列中不存在 $101,010$ 的子序列。
题解:即将序列变为 $1\cdots10\cdots0$ ,$0\cdots01\cdots1$ ,$1\cdots1$ ,$0\cdots0$,枚举分割位置,用前缀和计算一下取最小值即可。
C
D
题意:一道交互题,给你 $k$ 个集合 $S ,S_i\cap S_j = \emptyset$ ,定义 $ans_i=\max(a_j)$ ,其中 $j\not\in S_i$ 让你求出 $ans_i(i=1,2\cdots k)$。可以提出至多十二次询问,每次询问包含一个集合 $q$ ,返回一个值 $\max(a_{q_i})$ 数据范围:$n$ 为 $a$ 的长度, $k\le1000,n\le1000$
题解: 观察询问次数我们可以发现这应该是一道二分题,我们将对 $k$ 二分,将其中的一部分与那些不属于 $S$ 的元素合为一部分,对于这部分和剩下的一部分进行询问,可以的到两个集合的最大值,显然集合最大值大的集合即为另一个集合的答案,因此继续二分集合最大值大的集合即可。最后只剩下一个集合的时候直接询问除这个集合外所有元素的最大值即可,询问数正好为 $12$。
E
题意:给一棵以 $1$ 为根的树,大小为 $n(n\le2\times10^5)$,每个节点有一个值 $0/1$ 和一个目标值 $0/1$ 和一个代价 $a_i$,选取一个节点可以交换其子树内节点的值,代价为选取的节点个数 $k\times a_i$,问让每个节点的值和目标值相等的最小代价,如果不可能输出 $-1$。
题解:对于两个节点如果要交换一定是在两个节点的 $lca$ 到 $1$ 的路径中代价最小的点交换,因此 $dfs$ 时记录此节点到 $1$ 的代价最小值即可,且在子树中可以先行交换,依旧是正确的,所以在 $dfs$ 回溯的时候算一下答案即可。
F
2020-2021/teams/farmer_john/2sozx/codeforces_round_646_div._2.txt · 最后更改: 2020/06/01 11:52 由 2sozx