SWERC 2020 题解

Record

Solved Penalty A B C D E F G H I J K L M
8 1044 \(\color{green}{\texttt{+1}} \\ \tiny\textit{00:12}\)​​ \(\color{green}{\texttt{+}} \\ \tiny\textit{04:58}\) \(\color{green}{\texttt{+}} \\ \tiny\textit{01:35}\) \(\color{green}{\texttt{+}} \\ \tiny\textit{00:19}\) \(\color{green}{\texttt{+}} \\ \tiny\textit{00:54}\) \(\color{green}{\texttt{+1}} \\ \tiny\textit{03:40}\) \(\color{green}{\texttt{+2}} \\ \tiny\textit{02:55}\) \(\color{green}{\texttt{+3}} \\ \tiny\textit{00:31}\)

A - Gratitude

签到,开个 map,然后排个序即可。

C - Safe Distance

哈哈,签到题被我搞成绝杀。

一开始想了还以为要二分答案平面图转对偶图,然后我不会写这玩意,就扔那了,觉得应该有更好做法。

最后发现果然有。考虑答案一定属于所有点对间的距离(的一半),以及所有点到边界的距离其中一个值。考虑将这些东西看成边,距离看做边长,然后下、右边界,上、左边界看成两个点 \(s,t\)。我们从小到大加入这些边,直到加入这条边后 \(s,t\) 连通就停下,答案就是这条边的长度。

复杂度 \(O(n^2\log n)\),比二分做法简单很多。

D - Jogging

观察得知:规定每天恰好多用一条边必然可以最优。原因非常显然,具体的,我们一定是从距离近的用到距离远的。

还有一个观察:原路返回必然不比绕圈劣。

那么就很好搞了:我们跑出每个点的最短路长 \(\textit{dist}\)​,对于一条边 \(u,v(\textit{dist}(u) <\textit{dist}(v))\),我们能用它的充要条件是 \(\textit{dist}(i) \times 2 <R\)

于是最后就跑个最短路。复杂度 \(O(m\log n)\)

E - Cakes

签到。答案就是整除一下取个最小值。

F - Mentors

简单 dp。考虑设 \(f(i,j)\) 表示前 \(i\) 个点构成 \(j\) 棵树的森林的方案数。

那么新加入一个点 \(i+1\),有三种操作方案:

  • 作为森林中一棵新的树:\(f(i,j)\to f(i+1,j+1)\)
  • 选择一颗树并作为新的树根:\(f(i,j)\times j \to f(i+1,j)\)
  • 选择两棵树联立并作为新的树根:\(f(i,j) \times {j\choose 2} \to f(i+1,j-1)\)

注意新加 \(r\) 点时只有第一种转移。

复杂度 \(O(n^2)\)​。

G - Decoration

口胡一下,不写了!

看到第三个条件:\(s_{i+1}\equiv s_i + \sigma_0(s_i)\pmod n\)​。冷静一下发现 \(s_i\)​ 确定那 \(s_{i+1}\)​ 也是确定的。如果让 \(x\)​ 向 \((x+\sigma_0(x))\bmod n\)​ 连边,就构成了一个内向基环树(森林)。

接下来就是要求一条编号和最小的一条有向路径满足点不自交。

然后可以倍增了,复杂度 \(O(n\log n)\)。看范围应该是有个线性做法但懒得想了。

H - Figurines

本质上要求在线询问某个历史集合中 $\ge $ 某个数的个数。

这就没意思了,直接可持久化线段树就行,\(O(n\log n)\)

I - Emails

挺玄妙的一道题。

分析性质,设图上最长路长为 \(d\),那么答案即为 \(\lceil \log_2 d \rceil\)。然而我们并没有什么优秀的求这玩意的方法。

于是怎么办呢?我们随机化!考虑每次随机一个点,然后跑 bfs,找到最远点再跑,这样搞五六轮,然后再随机一个点,卡个 clock。然后就过了,真是震撼不已。

VP 之后更是大受震撼。结论,设任一点的最短距离最远点为距离为 \(d'\),那么有 \(d\in [d', 2d']\)。证明很简单:反证,反之则存在最长路上一个点,满足最长路与其较远端长度 \(>d'\)​,那么该点最远点就不是 \(d'\)。于是得证。

这东西对 \(\log_2\) 就很有用:我们任意一个最远距离,一定和真实最长路不差两倍,那么取对数后就相差不超过 \(1\)。而答案可以允许这点错误,于是输出 \(\lceil\log_2 d\rceil+1\)

一开始还以为这个差错是因为懒得判细节 事实说明随机化 yyds

K - Unique Activities

用 SAM 光速草了,太搞笑了。

结果发现就一哈希二分答案。

L - Restaurants

就你叫阅读理解题啊

题意简述:\(n\) 个人 \(m\) 个餐厅,每个餐厅有一个容量 \(c_i\)。每个人预定了若干餐厅并按偏好顺序排好序,每个餐厅对预定的顾客又有一个优先级。一个分配方案是合法的当且仅当每个顾客 \(c\)-餐厅 \(r\) 的配对,都满足不存在另一家有空位的餐厅 \(r'\),相比 \(r\)\(c\) 更偏爱 \(r'\);或存在一个尚未入座的顾客 \(c'\) 在餐厅 \(r\) 中优先级比 \(c\) 高。求出最多有多少顾客可以入座。

原来就是稳定婚姻匹配……考虑顾客主动求座:每个餐厅维护一个候选列表,一开始将 \(n\) 个顾客放入队列,每次取出一个,尝试一家尚未尝试过且最偏向的一家餐厅。先塞入该餐厅的候选列表,然后如果列表超出容量则弹出一个优先级最低的顾客,这位顾客重新入队再去别的餐厅尝试。

感觉复杂度玄学,不会算但是过了。

posted @ 2021-11-05 19:31  -Wallace-  阅读(502)  评论(0编辑  收藏  举报