首页 > 代码库 > tyvj1161聚会的名单(trie树)
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.
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。