现在的位置: 首页 > 综合 > 正文

poj2503

2018年04月26日 ⁄ 综合 ⁄ 共 848字 ⁄ 字号 评论关闭

【题意】

给定一些单词对应的单词,询问单词对应的单词

【输入】

先给定对应关系,两个单词A、B,中间用一个空格分隔

表示B对应的单词为A

然后一个空行分隔

接下来每行表示询问一个单词对应的单词

单词是100000级的,询问也是,单词长度不超过10

【输出】

对于每个询问输出对应的单词,若不存在对应的单词输出'eh'

trie树运用

program poj2503;
var
  tot,i,j,k:longint;
  p,s:string;
  trie:array [0..1000001,'a'..'z'] of longint;
  point:array [0..1000001] of string[10];

procedure insert (s,p:string);
var
  i,k:longint;
begin
  k:=0;
  for i:=1 to length(s) do
    begin
      if trie[k,s[i]]=0 then
        begin
          inc(tot);
          trie[k,s[i]]:=tot;
          point[trie[k,s[i]]]:='eh';
        end;
      k:=trie[k,s[i]];
    end;
  point[k]:=p;
end;

function find (s:string):longint;
var
  i,k:longint;
begin
  k:=0;
  for i:=1 to length(s) do
    begin
      if trie[k,s[i]]=0 then exit(0);
      k:=trie[k,s[i]];
    end;
  exit(k);
end;

begin
  tot:=0;
  repeat
    readln(s);
    if s='' then break;
    p:=copy(s,pos(' ',s)+1,length(s)-pos(' ',s));
    delete(s,pos(' ',s),length(s)-pos(' ',s)+1);
    insert(p,s);
  until false;
  point[0]:='eh';
  while not seekeof do
    begin
      readln(s);
      writeln(point[find(s)]);
    end;
end.
【上篇】
【下篇】

抱歉!评论已关闭.