• tyvj1161聚会的名单(trie树)


    背景 Background
    明天就是candy的生日,candy又会邀请自己的一大堆好友来聚会了!哎!又要累坏飘飘乎居士了!!
    描述 Description
        明天就是candy的生日。晚上,candy找到了飘飘乎居士。她给了飘飘乎居士一张名单,名单上记录了n个candy的好朋友。可是,飘飘乎居士发现,名单上有好多重复的名字啊,这可急坏了飘飘乎居士。所幸,飘飘乎居士找到了自己的oi朋友,希望能够帮助自己。飘飘乎居士会问某个名字,而你要做的任务就是计算出名单中出现了几次该名字。
    题解:
     trie模板题,贴一下网上抄来的模板……
    type node=record
         got:longint;
         next:array['a'..'z'] of longint;
         end;
    var t:array[0..1000000] of node;
        s:string;
        n,m,i,tot:longint;
    procedure getintree(s:string);
     var i,now:longint;
     begin
      now:=1;
      for i:=1 to length(s) do
       if t[now].next[s[i]]<>0 then now:=t[now].next[s[i]]
       else begin
             inc(tot);
             t[tot].got:=0;
             fillchar(t[tot].next,sizeof(t[tot].next),0);
             t[now].next[s[i]]:=tot;
             now:=tot;
            end;
      inc(t[now].got);
     end;
    function check(s:string):longint;
     var i,now:longint;
     begin
      now:=1;
      for i:=1 to length(s) do
        if t[now].next[s[i]]<>0 then now:=t[now].next[s[i]] else exit(0);
      exit(t[now].got);
     end;
    begin
     tot:=1;
     t[1].got:=0;
     fillchar(t[1].next,sizeof(t[1].next),0);
     readln(n);
     for i:=1 to n do
      begin
       readln(s);
       getintree(s);
      end;
     readln(m);
     for i:=1 to m do
      begin
       readln(s);
       writeln(check(s));
      end;
    end.
  • 相关阅读:
    操作系统基础知识与常见问题记录
    String
    Function
    HelloWorld
    替换空格
    二维数组中的查找
    建造者模式(Builder Pattern)
    单例模式(Singleton Pattern)
    工厂方法(Factory Pattern)
    设计模式概述
  • 原文地址:https://www.cnblogs.com/zyfzyf/p/3768522.html
Copyright © 2020-2023  润新知