牛客多校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 (不同子串的个数)的主要内容,如果未能解决你的问题,请参考以下文章