Facebook Hacker Cup 2020 Round 2 题解

Problem A: Ca-pasta-ty
题意:有\(N\)个位置,每个位置初始有\(S_i\)个人,要求使得每个位置人数在\([X_i,X_i+Y_i]\)范围,每次可以将一个人从一个位置移动到另一个位置,求是否可行以及最少操作次数.
题解:可行当且仅当\(\sum X\leq\sum S\leq\sum X+\sum Y\),操作次数为\(\sum\max(0,X-S)+\sum\max(0,S-X-Y)\).
复杂度\(O(N)\).

Problem B: Elimination
题意:\(N\)个人能力分别为\(1\)到\(N\).一共有\(N-1\)轮,每轮从剩下的人中等概率选取其中两个对决,输的人出局,能力较高的人获胜概率为\(P\).求每个人期望留下来的轮数.
题解:记\(dp_{i,j}\)为共\(i\)个人,能力第\(j\)小的人期望留下来的轮数.考虑每一轮五种情况:1.两个比\(j\)小的人对决;2.两个比\(j\)大的人对决;3.一个比\(j\)小,一个比\(j\)大的人对决;4.\(j\)和比\(j\)小的人对决;5.\(j\)和比\(j\)大的人对决,于是有.
\(dp_{i,j}=\begin{cases}0,&i=j=1,\\\frac{2}{i(i-1)}(\frac12(j-1)(j-2)dp_{i,j-1}+\frac12(n-j)(n-j-1)dp_{i,j}+\frac12(j-1)(n-j)(Pdp_{i,j-1}+(1-P)dp_{i,j-1}+(j-1)Pdp_{i,j-1}+(n-j)(1-P)dp_{i,j})+1,&\text{ohterwise}.\end{cases}.\)
复杂度\(O(N^2)\).

Problem C: Circular Circles
题意:给定\(N\)和\(M\),一个图由\(N\)个大小为\(M\)的环组成,并且相邻两个环间有一条边连接两个环上分别给定的点,共\(O(NM+N)\)条边.每次修改一条边的权值,求最小生成树权值.
题解:只有两种情况:1.去掉额外\(N\)条边权值最大的一条以及每个环中权值最大的一条边.2.分别去掉\(N-1\)个环中每个环权值最大的一条边以及剩下一个环中分别在两个连接点形成的两侧边中最大的\(1\)条边.使用multiset维护答案的复杂度是\(O(NM\log M+N\log N+E\log N+E\log M)\).

Problem D: Log Drivin' Hirin'
题意:在一棵带边长的有根树上,每个节点有权\(H\).每次询问给定节点\(X\)和初始权\(Y\),从节点\(X\)向下移动到叶子,经过每条边的代价为权\(\times\)边长,每次到一个节点时可以将当前的\(Y\)替换成该节点的权\(H\).
题解:记\(dp_u\)为从\(u\)出发初始权为\(H_u\)的答案,于是有:
\(dp_u=\begin{cases}0,&u\text{ is a leaf,}\\\min\{dp_v+\text{dist}(u,v)H_u:v\text{ is in subtree of }u\},&\text{ohterwise}.\end{cases}\).
记\(D_u\)为根到\(u\)的距离,容易发现\(dp_u=dp_v+H_uD_v-H_uD_u\),可以使用凸包优化.使用启发式合并以及将询问离线可以使得复杂度为\(O(N\log^2N+M\log N)\).

上一篇:413. 等差数列划分


下一篇:linux – 如何在不重新编译BusyBox的情况下在BusyBox上启用SSH?