题目大意
对于一个字符串序列,可以修改任意一个位置的字符串,问最终有多少种可能,使得所有长度至少为 222 的字符串序列中的所有字符集合与原来的相同。
解题思路
首先由于每一个字符串中的字符不会重复且长度最大不会超过 262626 ,那么我们不妨将每个小写字母用二进制表示,这样每个字符串都可以用一个整数来表示。那么对于第三点要求,就转化成:对于所有 1≤l<r≤n1\leq l<r\leq n1≤l<r≤n,均有 al∣al+1∣...∣ar=bl∣bl+1∣...∣bra_l | a_{l+1}|...|a_r = b_l|b_{l+1}|...|b_ral ∣al+1 ∣...∣ar =bl ∣bl+1 ∣...∣br 。
接下来考虑如何满足题目要求的第两、三个条件。不难发现,当我们要修改位置 iii 的元素是,对于一个包含 iii 区间 [l,r][l,r][l,r] ,满足 al∣al+1∣...∣ar=bl∣bl+1∣...∣bra_l | a_{l+1}|...|a_r = b_l|b_{l+1}|...|b_ral ∣al+1 ∣...∣ar =bl ∣bl+1 ∣...∣br ,那么一定需要满足长度至少为 222 的区间按位或值不变。因此,我们只需要让 aia_iai 与其相邻的数按位或后的值不变即可。
假设当前的数为 aia_iai ,变化后的数为 bib_ibi 且 bi≠aib_i \ne a_ibi =ai ,与其相邻的数为 xxx ,那么对于每一位老说有以下几种情况:
* ai∣xa_i | xai ∣x 的这一位为 000 ,那么 bib_ibi 的这一位一定为 000 ;
* ai∣xa_i | xai ∣x 的这一位为 111 ,并且 xxx 的这一位为 000 ,那么 bib_ibi 的这一位一定为 000 ;
* ai∣xa_i | xai ∣x 的这一位为 111 ,并且 xxx 的这一位为 111 ,那么 bib_ibi 的这一位可以为 000 ,也可以为 111 .
综上,不难发现,只有第三种情况 bib_ibi 会有两种情况,我们统计有 cntcntcnt 位会出现这种情况,那么位置 iii 的方案数就有 2cnt2^{cnt}2cnt 个,由于需要满足 ai≠bia_i\ne b_iai =bi 这个条件,还要把方案数 −1-1−1 。
最后将所有位置的方案数相加,即为答案。
参考代码