{ fp } {* * Problem : SUBSTR * Contest : UOI-2006 (Dnepropetrovsk) * Type : Solution * Date : April 1, 2006 * Author : Sergey Savchuk * Language : Pascal * Compiler : Free Pascal * Algorithm: Fast solution with reading char by char *} Var fo: Text; fi: File of char; a,ni:array['a'..'z'] of Longint; na,nii,i,ii,max,maxna,maxko: longint; ch: char; Begin Assign(fi,'SUBSTR.DAT'); Reset(fi); na:=1; For ii:=1 to FileSize(fi) do Begin Read(fi,ch); if ch<'a' Then continue Else inc(i); if na<=a[ch] Then Begin na:=a[ch]+1; nii:=ni[ch] End; if i-na+1>max Then Begin Max:=i-na+1; maxna:=nii; maxko:=ii End; a[ch]:=i; ni[ch]:=ii End; Assign(fo,'SUBSTR.SOL'); ReWrite(fo); Seek(fi,maxna); ii:=maxna+1; For ii:=maxna+1 to maxko do Begin Read(fi,ch); if ch<'a' Then continue Else Write(fo,ch); End; Writeln(fo); Close(fo) End.