暴力时利用自动机的最小性,可以在暴力dfs时和匹配答案时使用自动机优化,可以使纯暴力更快。
struct baoli
{baoli *xia[51];
baoli()
{
memset(xia,NULL,sizeof(xia));
}
}root;
trie树的结构体,xia【51】代表有51个可能的分支
{
int shu,i=0;
baoli *now=root;
bool you=0;
while(i<n)
{
shu=str[i];
if(now->xia[shu]==NULL)
you=1,now->xia[shu]=new baoli();
now=now->xia[shu];
i++;
}
if(you)return 1;
else return 0;
}
类似trie树的加入,不同的是返回,加入和匹配一体化,用bool判重。
bool pipei(char str*){
int shu,i=0;
baoli *now=root;
while(i<n)
{
shu=str[i];
if(now->xia[shu]==NULL) return 0;
now=now->xia[shu];
i++;
}
return 1;
}
< =o(n)的询问(谁还能更快?)
所以程序主要复杂度在dfs,再配合优良的剪枝效率会很高。