csp-s 模拟105 小w的魔术

个人觉得这道题非常的巨神,决定单独拿出来写一下题解。


一开始自己还看错题了,觉得这道题不可做。然后又读了一遍,觉得很可做,做到后来又觉得非常不可做。

很容易想到一个傻×容斥:用总情况减去合法情况,得到的是最终答案。

我们直接算合法的情况肯定是不行的,要考虑重复的情况。

考虑我们怎么想这个重复的情况。

重复?我们在重复相同算法的时候把相同的贡献计算了多次。

什么时候我们才会计算重复?在我们所计算的元素与原串中元素出现了重复,我们将原串和新串混为一谈,会导致错误。

首先我们可以作出贡献的位置有s+1个,就是插空。

我们怎么表示出来这种重复?

我们用{}表示插入的串,那么[........x]{.......x}[........]与[........]{..........}[x........]会有重复。

下面就该感性理解了。

上面的两个串是什么意思?“.”表示普通的字符,x表式“特殊的”(就是我要观察重复的)字符,然后我们会发现随着插入区间的移动,左边相当于是把右边的x“挤”到了左边。然后如果插入元素的开头是一个相同的x的话,左边的形式就会讲右边的形式重复计算。

那么只要我们规避这种情况就好了。

那它还会有[........]{x........}[x.........]和[........x]{.......}[.........]的情况呢?

其实两种情况是一样的。区间挪一挪就好了,我们照样可以把下面的形式转移成上面的形式,那么重复的含义会有所变化,但是两种情况等价,所以只用考虑一种情况就好了。

式子:$26^n-26^{n-|s|}-25*26^{n-|s|-1}*|s|$

 

posted @ 2019-11-08 16:50  _LH  阅读(167)  评论(2编辑  收藏  举报