偏简单的 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
-> B
,B
-> AC
-> AAB
-> AAAC
-> AAAAB
-> AB
。
Observation 3:每次转化后,B
与 C
的数量总和不会变小,且其奇偶性不变。
Observation 4:无论是 A
,B
还是 C
,我们总可以通过操作,使得 B/C
的总数增大 \(2\)。
Proof:容易发现,A
-> BB
,B
-> AC
-> BCC
,C
-> 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\)。对于此种情况,也是不合法的。
综上所述,本题被解决,时间复杂度线性。