首页 > 其他分享 >CF923D Picking Strings

CF923D Picking Strings

时间:2023-02-19 12:33:46浏览次数:48  
标签:AC AB Observation CF923D suffix text Picking Strings Proof

偏简单的 Ad-hoc 题,但质量很高。

Description

传送门

Solution

Observation 1:我们可以将 B 换成 C,也可以将 C 换成 B

Proof:容易发现 B -> AC -> AAB -> AAAC -> C,且 C -> AB -> AAC -> AAAB -> B

Observation 2:我们可以在将 B 之前的 A 删去,也可在 B 之前加入 A。根据 Observation 1,C 具有相同的性质。

Proof:容易发现,AB -> AAC -> AAAB -> BB -> AC -> AAB -> AAAC -> AAAAB -> AB

Observation 3:每次转化后,BC 的数量总和不会变小,且其奇偶性不变

Observation 4:无论是 AB 还是 C,我们总可以通过操作,使得 B/C 的总数增大 \(2\)。

Proof:容易发现,A -> BBB -> AC -> BCCC -> AB -> BCB

回到原题。不妨设询问区间为 \(S[l,r],T[L,R]\),两子串分别有 \(x\) 和 \(y\) 个 B/C

首先,若 \(S_r,T_R\) 均不为 A,则有解当且仅当 \(x<y\) 且 \(y-x \equiv 0 \pmod 2\)。必要性即 Observation 3,充分性也不难证:根据 Observation 4,我们先不断令 \(x\) 加 \(2\),直到 \(x=y\) 为止;随后,我们删去 \(S[l,r]\) 内的所有 A(\(S_r,T_R\) 始终不为 A,因此可以全部删去),再插入一些 A 即可使其与 \(T[L,R]\) 相等。

再考虑一般情况。令 \(\text{suffix}(s)\) 表示字符串 \(s\) 的极长 \(0\) 后缀的长度,\(p=\text{suffix}(S[l,r]),q=\text{suffix}(T[L,R])\)。显然,对 \(S[l,r]\) 进行操作不会使 \(p\) 增大,因此 \(p<q\) 时无解。若 \(p-q \equiv 0 \pmod 3\),那么我们使用若干次 AAA -> 即可将 \(p\) 缩减至 \(q\);否则,我们需要将 \(S[l,r]\) 中的后 \(p\) 个 \(A\) 中的一者改为 BC,才能转化为前述情况,但这样会让 \(x\) 增大 \(2\)。更新 \(x,y\) 之后再判断是否有 \(x<y,y-x \equiv 0 \pmod 2\) 即可。

但是这样会 WA 11,因为还有一种 corner case 没有考虑:若 \(p=q=r-l+1,q < R-L+1\),那么无法对 \(S[l,r]\) 进行任何操作,否则会使 \(p<q\)。对于此种情况,也是不合法的。

综上所述,本题被解决,时间复杂度线性。

Code

提交记录

标签:AC,AB,Observation,CF923D,suffix,text,Picking,Strings,Proof
From: https://www.cnblogs.com/ducati/p/17134535.html

相关文章