WC2024 Lectures

大概只会有例题题解。

P8263「Ynoi Easy Round 2020」TEST_8

Tag:S-持久化 WBLT。
使用 WBLT 来维护整个括号序列,则三四操作已经做完了。
考虑一二操作,使用倍增的方式处理出复制 \([l,r]\) 区间的结果,于是可以在 \(O(\log k)\) 的复杂度内求出复制 \(2^i\) 次的平衡树,递推即可。
可以说明这种重复复制的合并复杂度是 \(O(1)\) 的,于是就做到了 \(O(n\log n)\)Code
注意不要每次都到 \(\log 10^8\),没必要且常数大。

CF1753D The Beach

Tag:G-最短路。
将两种移动方式均看做是空位的移动,则可以将空位的移动建图。
具体的,对于每一种字符,其对应三个可以移来的空位,于是可以建立带权有向图。
只需要以所有空位为起点求出最短路后,枚举两个相邻的位置求答案即可,因为黑白染色后只有同色格子间才会发生空位移动,所以是有正确性的,做到 \(O(n\log n)\)Code

CF1750F Majority

Tag:D-计数 DP。
\(f_{i,j}\) 表示 \([1,i]\) 作为最终序列已被填完,同时末尾的 \(1\) 长度为 \(j\),钦定开头也是 \(1\) 的方案数,于是答案即为 \(f_{i,i}\),考虑正难则反。
则有 \(f_{i,i}=2^{i-2}-\sum_{2j<i}f_{i,j}\),考虑 \(f_{i,j}\) 的转移,枚举前面的全 \(0\) 段长 \(k\),全 \(1\) 段长 \(l\),于是有:

\[f_{i,j}=f_{j,j}\sum_{j+k<i}\sum_{j+l<k}f_{i-j-k,l} \]

合并条件可以得到 \(i-j-k+l<i-2j\),于是维护 \(g_s=\sum_{i+j<s}f_{i,j}\) 可以 \(O(1)\) 转移,由此做到 \(O(n^2)\)Code

ARC148D mod M Game

Tag:M-博弈论。
假设 \(n=1\),尝试让 Alice 选择的差是唯一的,会发现在 \(m\) 是奇数的时候只有两数相等才可行,\(m\) 是偶数的时候可以差 \(m/2\) 或者相等。
于是 Bob 的策略是一定希望只剩下这些的,于是直接下模仿棋,这样将可以配对的两两配对,能配对完 Bob 就能控制差为定值,这个值显然只可能是 \(m/2\)\(0\),判一下就行,\(O(n\log n)\),因为有 map,Code

DMOJ DMOPC22C2P6 Yogyakarta Elevators

Tag:S-并查集。
我估计会有很多细节,先理一下。
将电梯建点,则将一个楼层的电梯内连边,一个区间可以连通则说明出现的电梯对应的图是连通的,注意这里要以没有电梯的楼层为一个限制。
发现这张图最多会变化 \(2M-1\) 次,分别对应加入 \(M\) 个点和 \(M-1\) 条边,取出这些变化的楼层,从小到大枚举并维护整个图的连通块数量,如果连通块个数为 \(1\) 就对应一个区间,则这个楼层到下一个楼层之前都是答案。
\(M\) 个点的维护是好维护的,只需要处理出每个点的最小出现楼层;\(M-1\) 条边对应这张图的最小生成树,可以先将这些选的边取出来,然后跑 Kruskal 得到。
需要相当精细地实现以免多个 \(\log\),需要做到 \(O(nm\alpha(m))\) 才能通过,Code,其实细节不算多(?)。

IOI2023 封锁时刻

Tag:H-贪心。
如果在序列上这就是 Chessboard Box,是一个经典贪心问题。
考虑一下怎么把它丢到树上,发现最优情况下,一定可以先将这两个关键点的链上的点贡献出一,然后再贪心。
跑一个 Chessboard Box 即可,即枚举最大的取两个的位置,则他前面的肯定取至少一个,后面的肯定取至多一个。
Code\(O(n\log n)\)

posted @ 2024-01-30 21:41  cnyz  阅读(45)  评论(0编辑  收藏  举报