博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj1212
阅读量:6977 次
发布时间:2019-06-27

本文共 1311 字,大约阅读时间需要 4 分钟。

trie树最基本的应用了

不难得到f[i]=f[j] if (s[j+1~i]∈dictionary);
可以用trie树匹配

1 var can,f:array[0..1000010] of boolean; 2     son:array[0..1000010,1..26] of longint; 3     j,l,i,t,n,m,ans:longint; 4     ss:ansistring; 5     s:string; 6  7 procedure add(s:string); 8   var i,l,p,x:longint; 9   begin10     l:=length(s);11     p:=1;12     for i:=l downto 1 do13     begin14       x:=ord(s[i])-96;15       if son[p,x]=-1 then16       begin17         inc(t);18         son[p,x]:=t;19       end;20       p:=son[p,x];21     end;22     can[p]:=true;23   end;24 25 function ask(j:longint):boolean;26   var i,p,x:longint;27   begin28     p:=1;29     while j>0 do30     begin31       x:=ord(ss[j])-96;32       if son[p,x]=-1 then exit(false);33       p:=son[p,x];34       dec(j);35       if f[j] and can[p] then exit(true);36     end;37     exit(false);38   end;39 40 begin41   readln(n,m);42   t:=1;43   fillchar(son,sizeof(son),255);44   for i:=1 to n do45   begin46     readln(s);47     add(s);48   end;49   for i:=1 to m do50   begin51     readln(ss);52     l:=length(ss);53     fillchar(f,sizeof(f),false);54     ans:=0;55     f[0]:=true;56     for j:=1 to l do57     begin58       f[j]:=ask(j);59       if f[j] then ans:=j;60     end;61     writeln(ans);62   end;63 end.
View Code

 

转载于:https://www.cnblogs.com/phile/p/4473041.html

你可能感兴趣的文章
PyCharm IDE环境搭建
查看>>
HADOOP之PiG简介
查看>>
2017 多校6 String
查看>>
influxdb与传统数据库的比较
查看>>
滚动字幕
查看>>
Centos目录结构详细版
查看>>
MySQL 如何执行关联查询
查看>>
从硬币游戏学习敏捷开发
查看>>
2017 4月14日
查看>>
KMP
查看>>
CefSharp .net
查看>>
java中关于null的一些理解
查看>>
sqlite3中的数据类型
查看>>
1.26-CAD异形封装的制作
查看>>
android ImageLoader加载本地图片的工具类
查看>>
安全的发布 .NET 应用的改动到产品服务器环境
查看>>
解析含有资源类型的字符串
查看>>
C#:简单递归累加算法
查看>>
day13_H5_CSS_2
查看>>
Sass (Syntactically Awesome StyleSheets)
查看>>