【题解】ZONe Energy Programming Contest

评价

在 register 时,看到什么 energy drink 的选项才意识到这个 ZONe Energy 是个能量饮料公司。ATC 在日本影响力那么大的吗?

然后一看分数:100 200 400 300 500 600。知道了,肯定很毒瘤(估计是出题人能量饮料喝多了,然后就太毒瘤了)

题意+题解

整套题的设定貌似是一个外星人入侵地球,然后这个能量饮料公司出来周旋的样子。

当然很多题目内容和标题关系不大……

A - UFO Invasion

……比如这题……

实际题意为在给定串 \(S\) 中出现了多少次连续的 ZONe

暴力扫即可。

B - Sign of Friendship

……接下来剧情发展到好像外星人试图和地球人联系……

一栋很高的高楼在 \((0,0)\) 处向 \(y\) 轴正半轴无限延伸,有若干条线段 \(\overline{(0,d_i)(h_i,d_i)}\),求最小的 \(x\) 使 \(\overline{(0,x)(D,H)}\) 与所给线段没有交点。

可以二分答案,或者更简单地——枚举线段最顶上那个点与 \((D,H)\) 连线,最大的纵截距就是答案。

https://atcoder.jp/contests/zone2021/submissions/22203202

C - MAD TEAM

……貌似是你要组织外交团队……

\(n\) 个人,每个人有五个属性,现在你要选出 \(3\) 个人,总属性值为三个人中该属性最大的值,力量指为总属性值中最小的哪一个,求最大力量值。(\(n\le 3000\)

5ab 当时这道题卡了好久,以为 400 真的很难一样。其实后来想想也还好。


一直最大中的最小,最小中的最大?可以二分答案。

当然,5ab 不是这么做的。先枚举两个人,注意到另外一个人有选择的必要,当且仅当这个人 有某个属性的后缀最大值

然后枚举每个属性即可,预处理后缀最大值位置,复杂度 \(\mathcal{O}(25n^2)\)

https://atcoder.jp/contests/zone2021/submissions/22216693

D - Message from Aliens

……然后是互相通信……

\(T\) 初始为空,现在有两种操作:

  • 在末端加入一个字符;
  • 将字符串反转。

完成所有操作后,还要删除所有 \(T\) 当中所有 连续的两个相同字符,并将分开的两个串合并,直到无法操作为止。输出 \(T\)

注意到整体的反转非常费时,我们可以打一个标记。如果有这个标记就从头部插入,并且反向输出,然后改用双端队列维护。

经过观察,插入完后的操作其实是可以提前至插入的。如果插入的字符与前一个相同就同时移除。

https://atcoder.jp/contests/zone2021/submissions/22206799

(可见 5ab 是先做 D 再做 C 的)

E - Sneaking

sneak v. 偷偷地走

……看来是要潜入大本营啊……

给定一个网格图,每条边上都有权值。你只能在网格图上往前,往左,往右。同时,如果你往后退 \(i\) 格,那么权值为 \(i+1\)

你在左下角,UFO 在右上角 \((r,c)\) 的位置,求你到 UFO 的最短路。(\(r,c\le 500\)

显然暴力最短路是不可的,我们考虑优化建图。

注意到往后倒退权值的变化是线性的,所以我们可以考虑建分层图。

  • 一层图是原先的网格图;
  • 另一层图可以理解成 天空(你往回「跳」了若干格),只建往后的边,权值为 \(1\)
  • 在两层图之间建立桥梁,由于权值还要多 \(1\),所以要有多余 \(1\) 的权值。(5ab 的方法是往上权值 \(1\),往下 \(0\)

这样一个点最多建 \(6\) 条边,dijkstra 跑一跑就行了。

https://atcoder.jp/contests/zone2021/submissions/22221988

F - Encounter and Farewell

……好家伙这是进入了银河系网络了吗……

\(N\) 个节点,从 \(0\)\(N-1\) 编号。有 \(M\) 个递增正整数 \(A_i\),如果两个节点 \(u\)\(v\) 满足 \(u\operatorname{xor} v = A_i\) 则这两个节点之间没有连边,反之则有边。

(存在 \(n\in \mathbb{N}^{+}\) 满足 \(N=2^n\)\(1\le n\le 18\)

求这个无向图是否连通,如果是给出一棵最小生成树。

又是赛时懵掉的一道题。当时猜了个结论结果 wa+tle 了,然后就结束了。

暂时 5ab 也没有彻底理解,建议访问这位 \(\rightarrow\) ak 奆佬的博客

总之,需要至少 \(n\) 个互不相同的异或组(两两异或得不到另外一个)来构建最小生成树。实际上就是建一个线性基,然后用一定的可行集去反推 MST。

UPD on 2021-05-05:题解写好了。

posted @ 2021-05-01 22:38  5ab  阅读(156)  评论(0编辑  收藏  举报