简单统计+快排: { Author:wzx961008 Problem:UVa 10815-Andy's First Dictionary Verdict:Accepted Language:PASCAL Run Time:0.528s Submission Date:2011-01-14 12:43:12 } var dict:array[1..5001]of string; num,i:longint; t:boolean; s:string; c:char; procedure qsort(l,r:longint); var i,j:longint; x,y:string; begin i:=l; j:=r; x:=dict[(l+r)>>1]; repeat while dict[i]<x do inc(i); while x<dict[j] do dec(j); if i<=j then begin y:=dict[i]; dict[i]:=dict[j]; dict[j]:=y; inc(i); dec(j); end; until i>j; if l<j then qsort(l,j); if i<r then qsort(i,r); end; begin while not eof do begin while not eoln do begin read(c); if ((c>='A')and(c<='Z'))or((c>='a')and(c<='z')) then begin s:=''; while true do begin if (c>='a')and(c<='z') then s:=s+c else s:=s+chr(ord(c)+32); read(c); if not(((c>='A')and(c<='Z'))or((c>='a')and(c<='z'))) then break; end; t:=true; for i:=1 to num do if dict[i]=s then t:=false; if t then begin inc(num); dict[num]:=s; end; end; end; readln; end; qsort(1,num); for i:=1 to num do writeln(dict[i]); end.