CH Round #16

Prefix 35/105 From lydrainbowcat
Channel 4/87 From lydrainbowcat
Parade 7/78 From lydrainbowcat

当时在看数论,没参加比赛(蒟蒻怕掉Rating我会说?)

简单看了一下题,难度似乎不是很大,都有一定思路,举办方已经给了题解,不过我还是说说自己的想法吧,也就是昨天的第一眼感受。

Prefix:前缀很容易就想起来Trie,一上来就数据结构?这么凶残?不过Trie码起来也很快的,一边码完,测了下样例就交了。==可耻的85了……改了一下A了,貌似将近花了30分钟……想当年ACM,就挂在Trie上了,绝对AC的算法,可惜当时Trie很不熟。不过为了不体现凶残性,qsort应该也是可以做的,字典序,然后每个串与前后两个串(必定相似性最高)对比枚举一下就出来了。

Channel:貌似很厉害的T。反正一看到这种东西就容易想到树状数组、线段树之类的,不过貌似不太可行,目测下写爆搜。

Parade:把相邻的数字作差,转换成大、小写字母,然后上KMP。其实我也不知道这个可不可行。目测官解也是KMP,不过估计思路不一样吧。

 1 program ta;
 2 type
 3  trie=^link;
 4  link=record
 5   c:integer;
 6   t:array ['a'..'z'] of trie;
 7  end;
 8 var
 9  n,ls,i:integer;
10  z:char;
11  head:trie;
12  s:array [1..1000] of ansistring;
13 procedure fill(q:trie);
14 begin
15  for z:='a' to 'z' do q^.t[z]:=nil;
16 end;
17 procedure build(q:trie;x:integer);
18 begin
19  inc(q^.c);
20  if x>ls then exit;
21  if q^.t[s[i][x]]=nil then begin
22   new(q^.t[s[i][x]]);fill(q^.t[s[i][x]]);q^.t[s[i][x]]^.c:=0;
23  end;
24  build(q^.t[s[i][x]],x+1);
25 end;
26 function ask(q:trie;x:integer):integer;
27 begin
28  if q^.c=1 then exit(x-1);
29  if x>ls then exit;
30  exit(ask(q^.t[s[i][x]],x+1));
31 end;
32 begin
33  readln(n);
34  new(head);fill(head);head^.c:=1;
35  for i:=1 to n do begin
36   readln(s[i]);ls:=length(s[i]);
37   build(head,1);
38  end;
39  for i:=1 to n do begin
40   ls:=length(s[i]);
41   writeln(copy(s[i],1,ask(head,1)));
42  end;
43 end.
Prefix

 

posted @ 2013-10-04 18:13  lcj2018  阅读(201)  评论(0编辑  收藏  举报