省选模拟45

A.

  考虑给整个矩阵按照每行为一个字符串建出一颗trie树,然后给每个节点存一下出现在第几行就可以统计答案。

  考虑如何得到整个矩阵的答案,那么接下来要做的就是将trie的第一层节点删掉,这个东西可以简单地用trie树合并实现,在合并的过程中维护答案即可。

  用splay启发式合并的复杂度似乎更加优秀,但是并不知道为什么。

B.

  看到与运算就能想到按位处理,然后发现对于一个端点来说不同的结果只有log种。

  于是维护这log个位置就行了,然后将询问离线,在右端点处处理所有的询问。

  然后就对应了区间修改,区间查询,直接维护就行。

C.

  考虑枚举最大值出现的位置,然后只要得到从前向后出现$a-1$个特殊点,后面出现$b-1$的方案数就可以统计答案。

  然后发现这个东西可以简单dp,于是将状态转移方程写出来之后发现就是第一类斯特林数。

  于是答案就是$sumlimits_{i-1}^n s(i-1,a-1) s(n-i,b-1) C(n-1,a-1)$。

  考虑这个东西的实际含义,就是一共选出来$a+b-2$,并且前$a-1$个环和后$b-1$个环不等价的方案数。

  所以答案就是$s(n-1,a+b-2)*C(a+b-2,a-1)$。

  然后只要求出来一行斯特林数即可,直接倍增就行了。

原文地址:https://www.cnblogs.com/hzoi-cbx/p/12494562.html