牛客多校2018第一场 I Substring (不同子串的个数)

Posted issue是fw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客多校2018第一场 I Substring (不同子串的个数)相关的知识,希望对你有一定的参考价值。

题意

给定串 s s s,只由字母 a , b , c a,b,c a,b,c组成

现在我们有 3 ! 3! 3!种方式重新表示 a , b , c a,b,c a,b,c的含义

比如让字母 a a a表示 ′ b ′ 'b' b,让字母 b b b表示 ′ a ′ 'a' a,让字母 c c c表示 ′ c ′ 'c' c

那么子串 a b c abc abc经过映射后就是 b a c bac bac

现在请你求出, s s s中的不同构子串数量。

s 1 , s 2 s_1,s_2 s1,s2串不同构,指的是 s 1 s_1 s1在任意映射规则下都无法等于 s 2 s_2 s2


3 ! 3! 3!枚举字母之间的映射情况,可以得到映射后的 6 6 6个串,都插入 S A M SAM SAM

设在原串中,子串 s 1 s_1 s1和子串 s 2 s_2 s2是同构的

那么 s 1 s_1 s1会形成 3 ! 3! 3!个子串插入 S A M SAM SAM, s 2 s_2 s2也会

s 1 s_1 s1由超过一种字符串组成,那么会形成 6 6 6本质不同串

s 1 s_1 s1由单一字符串组成,那么会形成 3 3 3中本质不同串

又因为 s 2 s_2 s2 s 1 s_1 s1同构,所以 s 2 s_2 s2形成的子串和 s 1 s_1 s1形成的子串完全相等

那么加入把 3 ! 3! 3!种字符映射串插入到 S A M SAM SAM,此时 S A M SAM SAM的本质不同串相当于

(记原始串单一字符不同构子串有 a a a个,非单一字符不同构子串有 b b b个)

3 a + 6 b = S A M 3a+6b=SAM 3a+6b=SAM

这样因为 a a a很好统计,所以可以求出 b b b

那么答案就是 a + b a+b a+b

最后答案就是 (不同子串数量 + 3 × 单一字符的串) / 6

代码不写了,都是板子(主要是因为牛客需要付费才能交题)

以上是关于牛客多校2018第一场 I Substring (不同子串的个数)的主要内容,如果未能解决你的问题,请参考以下文章

2022牛客多校第一场ACDGIJ

2022牛客多校第一场ACDGIJ

2022牛客多校第一场ACDGIJ

2021牛客多校2 - Stack(单调栈+拓扑)

Math(牛客多校第三场)

2021牛客多校1 - Hash Function(思维+FFT)