用户工具

站点工具


2020-2021:teams:i_dont_know_png:neerc2016

2016-2017 Northeastern European Regional Contest (NEERC 2016)

比赛链接

nikkukun qxforever 二人场

A - Abbreviation

solved by nikkukun & qxforever

题目描述

给一些文本串,将其中需要缩写的单词串改为首字母缩写形式。需要缩写的串满足:

  1. 每个单词首字母大写,且之后有至少一个小写字母
  2. 每个单词之间仅有一个空格连接

解题思路

🐴力题。

B - Binary Code

idea from potassium, upsolved by nikkukun

题目描述

给一些 $01$ 串,每个串中最多有一个 ?,其中可以填 $0$ 或 $1$。指定一种填的方案,使得不存在一个串是另一个串的前缀,或说明无解。

字符串总长度为 $5 \times 10^5$。

解题思路

把 Trie 建出来,将有问号的串分别考虑 $01$ 后都插入到树上,这样变成在树上选一些点,这些点两两之间要满足一些限制:

  1. 同一个串对应的两个点恰选一种
  2. 选中一个点后,其祖先不能有其他点被选
  3. Trie 树的一个节点中,只能有一个点被选

这就是一个 2-SAT 问题。

限制 1 的建图:基操。

限制 2 的建图:额外设置一个辅助变量 $t_u$ 表示 $u$ 及其祖先是否有点被选,则某个点 $u$ 被选,当且仅当 $t_u$ 为真且 $t_{\mathrm{pa}(u)}$ 为假。显然 $t_i$ 变量是可以在相邻两个位置建立关系的,详见 CF1215 - Radio Stations

限制 3 的建图:可以类似情况 2 额外设置 $O(n)$ 个辅助变量,使得一个树的节点中最多选中一个节点。也可以通过观察发现,如果某个节点超过该节点的串长度 $+ 1$,则怎么赋值都会产生无解,这时暴力两两加限制的均摊复杂度是 $O(1)$ 的。

C - Cactus Construction

upsolved by nikkukun

题目描述

有 $n \leq 5 \times 10^4$ 个点,一开始所有点不连通,每个点都是一个子图,颜色都是 $1$。有三种操作:

  1. j u v:把 $u$ 和 $v$ 所在的子图合并(但不加边);
  2. c u c1 c2:把 $u$ 所在的子图中颜色为 $c_1$ 和 $c_2$ 的点之间都连一条边。该操作不产生自环,但可能产生重边;
  3. r u c1 c2:把 $u$ 所在的子图中颜色为 $c_1$ 的点都改为 $c_2$。

给定一个仙人掌,用不超过 $10^6$ 次操作构造出来。

解题思路

像 DFS 树一样遍历每个点双连通分量,并在递归过程中将所有子仙人掌合并到当前所在的连通分量上。

我们钦定子仙人掌需要满足只有根节点颜色为 $2$,其他节点颜色为 $1$。假设现在要把 $u$ 的所有子仙人掌都合并到 $u$ 所在的连通分量上,并钦定 $u$ 的颜色为 $4$。按 $u$ 所在的连通分量讨论:

  • 桥:子仙人掌加入连通分量,连接 $(2, 4)$ 后将子仙人掌的根节点颜色从 $2$ 改为 $1$ 即可。
  • 环:维护环上的颜色为 $4, 1, 1, \ldots, 3$,每次加入一个子仙人掌后,连接 $(3, 2)$ 并维护链为 $4, 1, 1, \ldots, 1, 3$,直到所有环上的点都添加完毕。最后连接 $(3, 4)$ 并修改 $3$ 为 $1$,让环闭合。

递归结束后将根节点的 $4$ 改回 $2$,即可维护性质。

D - Delight for a Cat

upsolved by potassium

题目描述

有一个人,在某一时刻可以睡觉也可以吃饭,要求连续 $k$ 时刻至少有 $m_s$ 时间在睡觉,至少有 $m_e$ 时刻在吃饭。给定特定时刻睡觉 / 吃饭的快乐值,求最大快乐值以及方案。

解题思路

E - Expect to Wait

solved by nikkukun

题目描述

一个共享单车停车场会在一些时刻有人借车或还车,且同一时刻只会发生其中一种事件,若某个时候无车可借时,就会排队等待到下一次有人还车。$10^5$ 次询问停车场初始有 $b_i$($0 \leq b \leq 10^9$)辆车时,所有人的等待时间之和,或说明根本等不到车。

时刻数不超过 $10^5$,单次借还数量不超过 $10^4$。

解题思路

先假设初始时没有车,把每个时刻的总借车人数(包括等待中的)减去总归还车辆数的差按时间在坐标轴 $xOy$ 上画出,则所有人的等待时间为 $y \geq 0$ 部分的面积。而改变初始车辆数,等于一同变化整体高度,因此维护好每一个矩形块的高度和面积即可 $O(\log n)$ 计算答案。

F - Foreign Postcards

solved by qxforever

题目描述

一个人手里有 $n$ 张牌,这些牌有的正面朝上有的反面朝上。 设当前手里有 $k$ 张牌,随机选择一个 $x\in[1,k]$ 。如果当前第一张牌是反的,就将这 $x$ 张牌全部翻过来。之后将这 $x$ 张牌移走。直到手里没有牌。问最后反面朝上的牌的数量的期望。$n\le 10^6$

解题思路

设 $f_i$ 为最上面的牌是第 $i$ 张牌的期望,$g_{ij}$ 表示 $[i,j]$ 中和 $i$ 状态相反的数量。那么有 $f_i=\frac{1}{n-i+1}(\sum_{j>i}f_j+\sum_{j>i}g_{ij})$ 。 从后往前 DP ,维护 $f$ 的后缀和,$\sum_{j>i}g_{ij}$ 可以用两次前缀和预处理求出。

G - Game on Graph

upsolved by potassium

题目描述

给一个有向图,两个人 A B 在上面玩游戏。设初始节点为 $p$ ,两人轮流走,谁无路可走谁就输了。

A 特别享受玩的过程,比起赢更想要平局。

B DDL 特别多,平局还不如输掉。

两人都采取最佳策略,求出任意先后手顺序、任意初始节点情况下,他们的胜负平情况。

解题思路

先判断能不能平。对于出度为 $0$ 的点,认为不能平。如果轮到 A 走且某个点的所有出点都不为平,那么这个点也不平;如果轮到 B 走且存在不平的出点,那么这个点也不平。进行 BFS 即可。

再判断能不能胜。如果某个不平点的所有不平出点全为负,那么这个点负,否则胜。同样进行 BFS 。

最后,如果还有无法判断胜负的节点,由于 A 会倾向平局,但 B 有选择负或平的机会,必然会选择负,那么 A 胜, B 负。

H - Hard Refactoring

solved by qxforever

题目描述

给一堆关于 $x$ 的逻辑表达式。求表达式真的解集。

解题思路

模拟即可。

J - Jenga Boom

solved by nikkukun & qxforever

题目描述

给一个叠叠乐,每次抽掉其中的一块,如果有某一层之上的总重心投影超出了该层平面的凸包或在边界上,则积木倒塌。

求哪次操作之后倒塌,或说明不会倒塌。

解题思路

注意到范围很小,因此对每层维护 $\sum_i m_i \times x_i$ 和 $\sum_i m_i$($x_i$ 为某个方向的坐标轴),就可以计算出某一层之上的重心了。所有的变量都可以在一次抽掉积木后 $O(\max \{h, n\})$ 更新。

K - Kids Designing Kids

upsolved by potassium

题目描述

给三个 $w_i,h_i\in[1,1000]$ 的 $01$ 矩阵,问能不能通过平移第二个矩阵,让前两个矩阵的异或中 $1$ 的位置和第三个矩阵能够一一对应。

解题思路

题意可以转化为,是否可以让三个图通过平移,异或和为零矩阵。

于是考虑找特殊点,不妨找左上角的 $1$ 。必然恰有两个矩阵左上角的点重合,否则显然三个矩阵无法异或和为零。枚举三种情况进行 check 即可。

check 的时候,找出平移位置,再根据两个矩阵的异或和矩阵与第三个矩阵进行形状判断。

2020-2021/teams/i_dont_know_png/neerc2016.txt · 最后更改: 2020/05/24 18:52 由 potassium