• [专题总结]AC自动机


    其实前面的模板也不是1A,我在题库里提前做过,也不必在意罚时,刚开始我在做别的专题

    裸模板我就不说了,各个博客讲解的很明白

     1 void insert(string s){
     2     int p=0,len=s.size();
     3     for(int i=0;i<len;++i)
     4         if(c[p][s[i]-'a'])p=c[p][s[i]-'a'];
     5         else p=c[p][s[i]-'a']=++cnt;
     6     ++iii;bj[p].push_back(iii);pos[iii]=p;
     7 }
     8 void bfs(){
     9     int qt=0;
    10     for(int i=0;i<=25;++i)if(c[0][i])q[++qt]=c[0][i];
    11     for(int qh=1;qh<=qt;++qh)
    12         for(int j=0;j<=25;++j)
    13             if(c[q[qh]][j])fail[q[++qt]=c[q[qh]][j]]=c[fail[q[qh]]][j];
    14             else c[q[qh]][j]=c[fail[q[qh]]][j];
    15 }
    16 void find(string s){
    17     int pp=0,len=s.size();++iii;
    18     for(int i=0;i<len;++i){
    19         pp=c[pp][s[i]-'a'];int k=pp;
    20         while(k){
    21             if(al[k]==iii)break;
    22             if(!bj[k].empty())for(int i=0;i<bj[k].size();++i)if(bj[k][i]<iii)p[++pcnt]=bj[k][i];
    23             k=fail[k];al[k]=iii;
    24         }
    25     }
    26 }
    纯模板(最终常用形态)

    事实上,trie树并没有什么用,基本上建的都是trie图

    DP还是有点意思的,但是说白了都是一个套路

    最短母串:

    其实我用的不是AC自动机,因为没跑trie图所以没有必要建出来,只不过是把所有是别的串的字串者预处理干掉能让dp简单许多,最后没用AC自动机代码性能反而提高了。

    文本生成器/禁忌:

    裸的AC自动机跑trie图,就是问跑len步之后会停在哪里,或者路过了几个标记节点等等。。。禁忌稍微结合了一下矩阵快速幂,就没什么了。

    教练把SPJ打错了还说我代码有问题嘤嘤嘤~3e6的输出答案误差1e-5我能怎么办呀?教练不读题然后还屠我两节课嘤。

    背单词:

    奇裸无比,是唯一一个没跑图而要找字串的。直接预处理字串,读入时忽视负权值字串能防T,然后裸DP,超无聊。

    密码:

    挺麻烦的一道题。关键是需要输出最后组成的串,存一大堆东西再逆DFS回溯回去就好了。

    虽说病毒那道题是模板,但是它的思路值得一想。问是否存在无限长的串使之不匹配。

    就是trie图无环啦

  • 相关阅读:
    2019-7-3-WPF-使用-Composition-API-做高性能渲染
    2019-7-3-WPF-使用-Composition-API-做高性能渲染
    2018-8-10-win10-uwp-禁止编译器优化代码
    2018-8-10-win10-uwp-禁止编译器优化代码
    2018-2-13-wpf-如何使用-Magick.NET-播放-gif-图片
    2018-2-13-wpf-如何使用-Magick.NET-播放-gif-图片
    2019-8-31-Developing-Universal-Windows-Apps-开发UWA应用-问答
    2019-8-31-Developing-Universal-Windows-Apps-开发UWA应用-问答
    2019-3-1-WPF-从零开始开发-dotnet-Remoting-程序
    busybox
  • 原文地址:https://www.cnblogs.com/hzoi-DeepinC/p/11057983.html
Copyright © 2020-2023  润新知