zoukankan      html  css  js  c++  java
  • 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|$

  • 相关阅读:
    《剑指offer》Q01-12 (牛客10.11)
    北京,我来了
    pods的好处
    iOS那些你从未使用过的属性方法
    重构一个运行超过10年的老项目
    C#泛型
    认真思考创建对象的几种方式
    2014年终总结
    前端优化:AMDclean去除requirejs
    webstorm常用快捷键及插件
  • 原文地址:https://www.cnblogs.com/LH-Xuanluo/p/11821364.html
Copyright © 2011-2022 走看看