• bzoj1212


    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   begin
    10     l:=length(s);
    11     p:=1;
    12     for i:=l downto 1 do
    13     begin
    14       x:=ord(s[i])-96;
    15       if son[p,x]=-1 then
    16       begin
    17         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   begin
    28     p:=1;
    29     while j>0 do
    30     begin
    31       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 begin
    41   readln(n,m);
    42   t:=1;
    43   fillchar(son,sizeof(son),255);
    44   for i:=1 to n do
    45   begin
    46     readln(s);
    47     add(s);
    48   end;
    49   for i:=1 to m do
    50   begin
    51     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 do
    57     begin
    58       f[j]:=ask(j);
    59       if f[j] then ans:=j;
    60     end;
    61     writeln(ans);
    62   end;
    63 end.
    View Code
  • 相关阅读:
    s3fs 挂载minio为本地文件系统
    P5787 线段树分治
    P5494 线段树分裂
    P1552 [APIO2012]派遣
    CF600E Lomsat gelral(线段树合并)
    P5283 异或粽子
    P4735 最大异或和(可持久化 trie)
    P3960 列队
    bzoj4316 小C的独立集
    P5021 赛道修建
  • 原文地址:https://www.cnblogs.com/phile/p/4473041.html
Copyright © 2020-2023  润新知