摘要: 此题很明显的AC自动机。。。先介绍一个神奇的性质:如果我们将AC自动机的Fail指针全部反向,将得到一棵由Fail指针组成的Fail Tree。对于模式串i来说,它的最后一个字母在Fail Tree中的节点的后代的数量与该串在其它串中出现的次数相等。然后我们得到一个离线算法:将询问双关键字排序,在FailTree上做一次DFS,得到DFS序。za再用树状数组维护前缀和。具体做法:扫描原串,遇到小写字母,将相应的DFS序的位置+1,遇到P询问,B将字母弹出。由于这个题还有许多细节,详细请看代码:#include<iostream>#include<algorithm>#i 阅读全文
posted @ 2013-04-18 16:04 Return_0 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 这是一道最经典的基于连通性的状态压缩dp。f[i][j][s]表示轮廓线到i,j格的时候,轮廓线上状态为s的方案数。用一个四进制数表示s:0表示该位置没有插头,1表示该位置的插头必须拐弯,2表示这个插头不必须被延长,3表示该插头必须被延长。具体转移请见程序:#include<iostream>#include<cstring>#include<cstdio>using namespace std;typedef long long LLint;const LLint MAXN=110;const LLint HASHSIZE=3000009;const LL 阅读全文
posted @ 2013-04-18 15:38 Return_0 阅读(258) 评论(0) 推荐(0) 编辑