LOADING

加载过慢请开启缓存 浏览器默认开启

建议搭配 steam++ 食用更佳

Revethere の Blog

Bidirectional Edge Without Loop

『做题记录』Test 8.18

做题记录 2023/8/19

手语的 Gnsi

题面

给定三个正交矩形和一个点 , 问是否存在一个三角形 , 使得该三角形的三个顶点分别在三个正交矩形内且该三角形的重心为给定点 .

解题思路

重心 $G = (\dfrac{x_1 + x_2 + x_3}{3} , \dfrac{y_1 + y_2 + y_3}{3})$ . 加上两个边界 :

  • $x_G = \begin{bmatrix} \dfrac{minx_1 + minx_2 + minx_3}{3} + \dfrac{maxx_1 + maxx_2 + maxx_3}{3} \end{bmatrix}$

  • $y_G = \begin{bmatrix} \dfrac{miny_1 + miny_2 + miny_3}{3} + \dfrac{maxy_1 + maxy_2 + maxy_3}{3} \end{bmatrix}$

阅读全文

『做题记录』Test 8.16

做题记录 2023/8/17

数学 Math

题面

在射线 $ON$ 上有两个定点 $A$ , $B$ . 在射线 $OM$ 上取一点 $P$ , 使得 $\angle APB$ 最大 ( 有且只有一个解 ) . 求点 $P$ 的坐标 .

解题思路

如图 , 构造以点 $P$ , $A$ , $B$ 为外接圆且 $OM$ 与点 $P$ 相切 . 此时 $\angle APB$ 最大 .

证明过程 : 在 $OM$ 上任取一点 $Q$ , 设 $AF$ 与 $\odot QAB$ 交于点 $Q^\prime$ , 则 $\angle AQB < \angle AQ^\prime B$ .

求点 $Q$ 的坐标可以用相似 , ${OE}^2 = OA \times OB$ . 求出 $OQ$ 长即可 .

阅读全文

『做题记录』Test 8.14

做题记录 2023/8/15

你所热爱的就是你的生活 ll

题面

给定一个序列 $price$ , 从序列内任取若干个数 , 使得价值和不超过 $m$ . 求方案总数 .

解题思路

折半搜索 , $l$ 和 $r$ 分别统计左右价值 , 去掉不满足条件的即可 .


家人 Family

题面

在一个 $2 \times n$ 的迷宫中有 2 种状态 , 能走和不能走 . 求给定两点 $u$ , $v$ 的最短路 .

解题思路

线段树维护 $[l , r]$ 列的 $2 \times (r - l + 1)$ 的左上到右上 / 下 , 左下到右上 / 下的最短路的值 .

对两个节点的答案合并 , 经过 $(0 , mid)$ 和 $(1 , mid)$ 的 $\min$ .

阅读全文

『做题记录』Test 8.12

做题记录 2023/8/13

网格行走 Path

题面

有一个 $n \times m$ 的网格 , 第 $i$ 行第 $j$ 列写有一个数 $a_{i,j}$ ( 从 0 开始 ) , 每个数仅出现一次 .

一条行走路径的价值为所有经过的点的集合的 $\operatorname{mex}$ 的值 .

定义一个集合的 $\operatorname{mex}$ 的值为最小的没有在集合中出现的非负整数 .

解题思路

要想 $\operatorname{mex}$ 的值大于等于 $d$ , 那么需要经过 $0 \ldots d$ 的所有点 .

非法方案是需要两个点即可 : $x_1 < x_2$ , $y_1 > y_2$ . 对于任意一个的点来说 , 在以它为原点的第 1 象限和第 3 象限的点都是非法的 . 数据结构判断 :

  • Method 1 : 二分答案 $d$ , 将对应点排序 , 以 $x$ 为第一关键字 , $y$ 为第二关键字 , 相邻点满足 $x$ , $y$ 均不降即可 ( 不需要真正的排序 ) . 复杂度 $O(nm \log nm)$ .
  • Method 2 : 动态加点判断 , 复杂度 $O(nm \log n)$ . ( 目前不会 >﹏<
阅读全文

『做题记录』Test 8.11

做题记录 2023/8/12

计数练习 Perm

题面

统计有多少 $m$ 阶排列比自己的逆排列的字典序小 .

即 $q(p)_{p_i} = i$ 并且存在一个 $i$ 使得 $\forall 1 \le j < i$ , $p_j = q(p)_j$ 且 $p_i < q(p)_i$ .

解题思路

排列的逆变换是有规律的 , 即 $q(q(p)) = p$ . 从 $p$ 和 $q(p)$ 来看 , 有关字典序的关系是相反的 , 所以只要 $q(p) \not = P$ , $(P , q(P))$ 就会对答案产生贡献 .

统计 $n$ 阶排列的数量 , 发现所有轮换大小不超过 2 的排列的逆排列就是它自己 . 记这样的 $n$ 阶排列的数量为 $f_n$ . 则 :

$$f_n = f_{n - 1} + (n - 1) \times f_{n - 2}$$

$$v_i = \dfrac{(i! - f_i)}{2}$$

阅读全文

『做题记录』Test 8.9

做题记录 2023/8/10

Lunch Concert

题面

P9025 CCC2021 S3 Lunch Concert ( 圆身 Genshin )

有 $n$ 个人在一条线上 , 初始位置为 $p_i$ , 移动一个单位长度的代价为 $w_i$ . 选定一个点 $c$ , 产生的代价为 $\sum_i^n w_i \times \max{(\lvert c - p_i \rvert - d_i , 0)}$ . 最小化这个代价 .

解题思路

完全随机算法狂砍 80pts . 出题人大好人 ( 雾 .

把一个人转化为一个线段 $[p_i - d_i,p_i + d_i]$ , 若要移动则 $c < p_i - d_i$ 或 $c > p_i + d_i$ .

于是得到单峰函数 . 二 / 三分或者模拟退火就行 .


MEX vs MED

题面

CF1744F MEX vs MED ( 弄药 Arena )

给定一个序列 $a$ , 值域为 $[0,n - 1]$ , 下标范围为 $[1,n]$ . 求有多少区间 [l,r] 满足 $\operatorname{mex}(a_l,a_{l + 1}, \ldots ,a_{r - 1},a_r) \le \operatorname{med}(a_l,a_{l + 1}, \ldots ,a_{r - 1},a_r)$ ( 原题为 ( $\operatorname{mex}(a_l,a_{l + 1}, \ldots ,a_{r - 1},a_r) > \operatorname{med}(a_l,a_{l + 1}, \ldots ,a_{r - 1},a_r)$ ) .

$\operatorname{mex}(S)$ 为没有在 $S$ 中出现的最小非负整数 .

$\operatorname{med}(S)$ 为 $S$ 从小到大排序后 $S_{\left\lfloor{\frac{\lvert S \rvert + 1}{2}}\right\rfloor}$ 的值 .

解题思路

定义 $list_i$ 表示 $i$ 出现的位置 , 即 $list_{a_i} = i$ . 若区间 $[l,r]$ 的 $\operatorname{mex} = d$ , 则必有 $l \le \min_{i \le d} list_i $ 并且 $r \geq \max_{i \le d} list_i$ .

对于每个 $\operatorname{mex} = d$ 只需考虑长度为 $d \times 2$ 和 $d \times 2 - 1$ 的区间个数 , 长度为 $d \times 2 - 2$ 的区间一定在 $\operatorname{mex}$ 的值为 $d - 1$ 的时候统计过 .

复杂度 $O(n)$ .


PRE-Prefixuffix

题面

P3546 POI2012 PRE-Prefixuffix

对于两个串 $S$ , $T$ . 将 $S$ 的一个前缀移动到其末尾等于 $T$ , 则 $S$ 和 $T$ 循环相同 .

给定串 $S$ , 求最大的 $L$ ( $L \le \dfrac{n}{2}$ ) , $S$ 的 $L$ 前缀与 $S$ 的 $L$ 后缀是循环相同的 .

解题思路

一般考虑循环相同会复制串 $A$ 两边得到 $AA$ , 从中寻找串 $B$ . 不过这道题这样做复杂度爆炸 .

两个循环相同的串可以表示为 $AB$ , $BA$ . 则题目等价于把原串表示为 $ABSBA$ 的形式下最长的 $AB$ .

令 $B = a B^\prime c$ , 那么原串可写为 $A a B^\prime c S a B^\prime c A$ , 就可以分为 $A a \lvert B^\prime \rvert c S a \lvert B^\prime \rvert c A$ .

$f_i$ 表示 $A$ 取 $S_{[1 , i]}$ 时最长的 $B$ . ( $S_{[i + 1 , i + f_i]} = S_{[n - i - f_i , n - i - 1]}$ ) . 由此可知 : $f_{i + 1} \ge f_i - 2$ , 存在单调性 . 初值为 $f_{\lfloor \frac{n}{2} \rfloor}$ , 考虑从 $f_{i + 1}$ 往回计算 $f_i$ . $f_i \le f_{i + 1} + 2$ . 统计最大值即可 . 复杂度 $O(n)$ .

阅读全文

『做题记录』Test 8.7

骰子游戏-Dice

题面

构造 $n$ 个骰子 , 每个骰子内的数互不相同 , 每个骰子随机取一个数 , 使得异或和为 $d$ 的倍数 .

解题思路

离谱的构造题 QwQ .

因为 $d$ 的范围较小 ( $0 \le d \le 60$ ) , 可以用 6 位二进制表示 , 64 进制构造 .

即 $0d$ , $1d$ , $64d$ , $65d$ , $4096d$ , $4097d$ . 值域不到上限 $3 \times 10^5$ , 能过 .


彩带裁剪-Cut

题面

给定一个长为 $n$ 的序列 , 将其分为若干区间 , 每个区间的贡献为最小的这个区间没有出现过的非负整数 $\operatorname{mex}$. 最大化 $\sum mex$ .

解题思路

显然的动态规划 .

设 $f_i$ 表示前 $i$ 个位置分开后的最大贡献 , 枚举上一个位置并计算 $\operatorname{mex}$ . 复杂度 $O(n^2)$

整体值域很小 , 因此每个区间的 $\operatorname{mex}$ 不会超过 $21$ . 并且 $dp_i$ 单调不降 , 转移时枚举最后一段的 $\operatorname{mex}$ , 求能取到该值的最右端 ( 可以预处理 ) . 复杂度 $O(nV)$


挑战NPC Hamilton

题面

给定一个 $n$ 个点 $m$ 条边的有向图 , 选出一些边 , 使得每个点的入度和出度都为 $1$ .

解题思路

拆点网络流 .

对于原图的点 $i$ , 建立边 $S \rightarrow i$ , $i + n \rightarrow T$ ( 流量为 1 ) , 对于原图的边 $u \rightarrow v$ , 建边 $u \rightarrow v + n$ .

跑 $S$ 到 $T$ 的最大流 $flow$ , 如果 $flow < n$ 则无解 , 否则将原图中所有所选的边 $u \rightarrow v$ 连成若干个环即可 .

阅读全文

『做题记录』Test 7.14 (COCI 2020-2021)

做题记录 2023/7/15

Vlak

题面

Nina 和 Emilija 轮流写字母 , 每个人写下的字母后的总字符串必须是对方指定的字符串的前缀 . 无法写下字母是对方获胜 .

每个人都会采取最优策略 .

解题思路

字典树加一点点贪心 .

首先将 Tire 树建好 , 另外记录每条边的所属信息 ( Nina 或 Emilija ) . 树上 $Dfs$ 即可 .

$Dfs$ 具体思路 :

把当前选择写字母的人的过程转换为当前点找边 , 点的深度表示当前写字母的人 ( 0 代表 Nina , 1 代表 Emilija ) , 只搜索属于自己的边 .

Strategy 1

向下找边时 , Nina 找到一条尽属于她自己的边 , 则当前的最优解就是选这条边 . 当下一次 Emilija 进行选边是一定无边可选 . Nina 获胜 .

Strategy 2

如果 Nina 找不到属于她自己的边 , 就无法向下找边 , Emilija 获胜 .

Strategy 3

如果 Nina 找到了属于她们两人的边 , 直接 $Dfs$ 都试一下 , 只要有一条能使她必胜 , 那么这条边就是所有的最优策略 . 否则 Emilija 必胜 .

总而言之 , 如果一条边同时属于两个人 , 向下把每条边 $Dfs$ , 只要有一条边的返回值能使她必胜那么对手必输 , 反之亦然 .


Papričice

题面

有 $n$ 个节点 ( 辣椒 ) , 这些节点由 $n - 1$ 条边连起来组成一棵树 . 现在需要删除 ( 切掉 ) 2 条边 , 使得这棵树分为 3 个子树 , 每个子树内节点的数量分别为 $a , b , c$ . 求 $\min(\max{(a,b,c)} - \min{(a,b,c)})$ .

解题思路

设节点 1 为根节点 , $size_i$ 为以 $i$ 为根的子树的节点的个数 , 则只有两种可以切割的情况 :

1 . 所切下来的 2 个节点以 $u$ , $v$ 为根 , 且互不为对方的祖先 , 则这 3 棵子树内的节点数分别为 $size_u$ , $size_v$ , $n - size_u - size_v$

对于这种情况 , 枚举其 LCA 的节点 $p$ . 在 $p$ 中的子树集合找到 $2$ 个集合最接近 $\dfrac{n}{3}$ 就 $o$ 的 $k$ 了 . ヾ(≧▽≦*)o

2 . 另一种情况是第 $1$ 刀切的边是 $u$ 的子树, 第 $2$ 刀切的是 $u$ 中的一个节点 $v$ 和它的父节点的边 . 则这 $3$ 棵子树内的节点数分别为 $size_u - size_v$ , $size_v$ , $n - size_u$ .

这种情况直接枚举所有 $u$ . 在集合内找最接近 $\dfrac{size_u}{2}$ 的子树 .

复杂度 $O(n \log^2 n)$

阅读全文
1 2 3 4
avatar
Revethere

悲观的乐观主义者
处于卷与摆烂之间