Atcoder ABC398 题解

ABC398

最快的一集。但是 BC 合吃五发罚时。

A

\(n\) 为奇数,那么前 \(\frac{n-1}{2}\) 和后 \(\frac{n-1}{2}\) 都是 -,第 \(\frac{n+1}{2}\) 个是 =
\(n\) 为偶数,那么前 \(\frac{n}{2}\) 和后 \(\frac{n}{2}\) 都是 -,第 \(\frac{n}{2}+1\) 个是 =

submission.

B

直接枚举两种牌 \(i,j\),看看出现次数是不是一个不少于 \(2\),一个不少于 \(3\) 即可。

submission.

C

记录下每种数的出现次数,然后枚举每个下标,找到出现一次的值中最大的下标即可。值域 \(10^9\),开 map 记录。

submission.

D

每个时刻都会加入一团烟,我们若维护每团烟的真实位置要用线段树,查找要用二分,很烦。

但是这个 NSWE 操作是全局的,我们可以弄两个全局 tag,即 dx 和 dy,分别记录行的平移量和列的平移量。

每次平移,就将 tag 做对应操作。加入 \((0, 0)\) 时,我们希望代码中塞进去的点,行列分别加上 \((dx, dy)\) 后是 \((0, 0)\),于是应该加进 \((-dx, -dy)\)
每次询问,就是要找我们有没有存下一个点 \((x, y)\),满足 \(x+dx=r,y+dy=c\)。即查找 \((x-dx, y-dy)\)

用 set 维护(不必 multi)。时间复杂度 \(O(n \log n)\)

submission.

E

没有奇环,就是要时刻保持二分图。
我们先对原树进行一个染色(树一定是二分图),找出左部点和右部点。显然左(右)部内部肯定两两不能连边。只能一个左部点,一个右部点之间连边。
只需要枚举左部点 \(u\),枚举右部点 \(v\),将原树中没有的边 \((u, v)\) 加进备选集合,我和 Takahashi 就只能在这个集合中选。

剩下就是,若集合中有奇数个元素,那么我先选;否则,我后选。
每次挑一个没选过 \((u, v)\) 的输出即可。

submission.

F

\(n\) 为串长,显然最终回文串的长度不会超过 \(2n-1\)。比如,最劣的时候 \(ABCDE \to ABCDEDCBA\)
套路地,处理回文,正着一遍 hash,反着一遍 hash。记正着 hash 区间 \([l, r]\)\(a(l, r)\),反着为 \(b(l, r)\)

我们令变量 \(len = 2n-1\),并从 \(n\)\(2n-2\) 枚举可能的长度 \(i\)

  • \(i\) 为奇数:那么原串关于 \(mid = \frac{n+1}{2}\) 对称。具体地,记 \(x=n-mid\),那么 \([mid-x, mid-1]\)\([mid+1, mid+x]\) 对称,即 \(a(mid-x, mid-1)=b(mid+1, mid+x)\)。(可手玩理解,比较简单)
  • \(i\) 为偶数:那么原串关于 \(\frac{n}{2} + 0.5\) 对称。具体地,记 \(mid=\frac{n}{2},x=n-mid\),那么 \(a(mid-x+1, mid) = b(mid+1, mid+x)\)

有个细节,这样写不会出现求一个非法区间 \([l, r]\) 的 hash,即 \(l \le 0\)\(r > n\)\(l > r\)

输出方案随便写就行。时间复杂度 \(O(n)\)

submission.

G

口胡一个思路,应该是对的吧。

类似 E 题,我们处理出每个连通块对应的二分图。连通块内部补充完整的方案显然唯一,不妨把它们补充完整。记每个连通块的左部点有 \(s_i\) 个,右部点有 \(t_i\) 个。那么补完整会加 \(c=(\sum s_it_i) - m\) 条边。对二取模不影响答案。

然后我们把所有连通块分成三类:

  • 左部点偶数个,右部点偶数个,记为 00 型。
  • 左部点偶数个,右部点奇数个(或反过来),记为 01 型。
  • 左部点奇数个,右部点奇数个,记为 11 型。

在连通块之间连边,实际上是合并连通块的过程。
如,将 \(s\) 的一个左部点连向 \(t\) 的一个右部点,就相当于获得一个新的连通块,左部点个数为 \(s,t\) 之和,右部点同理。

以下展示合并过程。

集合 1 集合 2 合并结果 产生贡献(奇 1 偶 0)
00 00 00 0
00 01 01 0
00 11 11 0
11 11 00 0
11 01 01 1
01 01 00 0
01 01 11(第二种情况) 1

发现 00 不会对合并结果造成任何影响。
然后我们做一个二维 DP:设 \(f_{i, j}\)\(i\) 个 11 型,\(j\) 个 01 型,先手最终的胜负结果。显然 \(f_{0, 0}=c \ {\text {mod}} \ 2\)
根据上面,\(f_{i, j}\) 可以从 \(f_{i-2, j},f_{i-1, j},f_{i+1, j-2},f_{i, j-2}\) 转移。

然后套路地,01 DP 可以用 bitset 优化。时间复杂度 \(O(\frac{n^2}{\omega})\)

posted @ 2025-03-22 11:34  Water_M  阅读(144)  评论(0)    收藏  举报