打完这场,终于上紫了。我好菜啊。
Problem A
题意:
给定 $a,b,c,d$。要求选取三个正整数 $x,y,z$($a \leq x \leq b,b \leq y \leq c,c \leq z \leq d$),使得以 $x,y,z$ 为三边长能组成一个三角形。
$1 \leq a \leq b \leq c \leq d \leq 10^9$
做法:
因为三角形任意两边之和大于第三边,很容易想到将两条短边 $x,y$ 取最长,长边 $z$ 取最短。则 $x=b,y=c,z=c$ 一定是一组合法解。
1 |
|
Problem B
题意:
给定正整数 $x$ 和两种操作。第一种操作将 $x$ 变为 $\lfloor \dfrac x2\rfloor+10$,第二种操作将 $x$ 减去 $10$。
你可以进行第一种操作最多 $n$ 次,第二种操作最多 $m$ 次。
问能不能将 $x$ 变成非正整数。
$x \leq 10^5,1 \leq n,m \leq 30$
做法:
显然应该先执行所有的第一种操作,然后执行第二种操作。
模拟即可。注意判断执行第一种操作使答案变劣的情况。例如 $x=6$,执行第一种操作会将 $x$ 变为 $13$,这个时候应该选择不执行第一种操作。
1 |
|
Problem C
显然我们应该优先选择深度尽量深的节点。
对于两个深度相同的节点,我们应该选择子树大小比较小的那个。因为选择这个点后,答案的贡献将会减少 该点子树大小 $-1$(这个点没被选择的时候,它所有子树到根的路径都会经过它)。
综上所述,我们可以计算选择每个点对答案的贡献:(深度 $-1$)$-$(子树大小 $-1 $)。排序之后取前 $k$ 大。
1 |
|
Problem D
容易发现,当确定了取的三个数 $x,y,z$ 中的任意两个时,第三个数就随之确定:例如,当 $x,y$ 确定时,$z$ 一定是 $b$ 数组中 $\dfrac {x+y}{2}$ 的一个不严格前驱 / 后继。
显然,当 $x$ 确定时,$y$ 取 $x$ 在 $g$ 数组中的不严格前驱 / 后继最优。
所以我们得到了一个算法:在 $r$ 数组中枚举 $x$,求出 $x$ 在 $g$ 数组中的不严格前驱 / 后继作为 $y$,并求出 $\dfrac {x+y}{2}$ 在 $b$ 数组中的不严格前驱 / 后继作为 $z$。
但容易发现,不一定是由 $x,y$ 确定推算出 $z$,还有可能是 $x,z$ 确定推算出 $y$。和上面的情况几乎完全一致,不再赘述。
1 |
|