{ 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 buffered reading *} Var fi,fo: Text; ff: File of char; a,ni:array['a'..'z'] of Longint; Buf: array[1..10000] of char; na,nii,i,ii,max,maxna,maxko: longint; ch: char; Begin Assign(fi,'SUBSTR.DAT'); Reset(fi); SetTextBuf(fi,Buf,10000); na:=1; While not EOF(fi) do Begin Inc(ii); 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; Close(fi); Assign(fo,'SUBSTR.SOL'); ReWrite(fo); Assign(ff,'SUBSTR.DAT'); Reset(ff); Seek(ff,maxna); ii:=maxna+1; For ii:=maxna+1 to maxko do Begin Read(ff,ch); if ch<'a' Then continue Else Write(fo,ch); End; Writeln(fo); Close(fo) End.