Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
程序如下In Reply To:现在的问题是WA,不是TLE。。。。 Posted by:zhougelin at 2005-06-19 18:59:20 program pku2406; const inputfilename=''; outputfilename=''; maxlen=1000005; var len:longint; data:array[1..maxlen]of char; ext :array[1..maxlen]of longint; chk :array[1..maxlen]of boolean; buf :array[0..1 shl 18]of byte; function read_data:boolean; var ch:char; begin len:=0; while not seekeoln do begin read(ch); len:=len+1; data[len]:=ch; end; read_data:=(len>1) or (data[1]<>'.'); if read_data then readln; end; procedure proceed; var i,j,k,max,l:longint; begin if len=1 then begin writeln(1); exit; end; ext[1]:=len; j:=0; while (j+2<=len) and (data[j+1]=data[j+2]) do j:=j+1; ext[2]:=j;k:=2; for i:=3 to len do begin chk[i]:=false; max:=ext[k]+k-1;l:=ext[i-k+1]; if l<max-i+1 then ext[i]:=l else begin if max-i+1>0 then j:=max-i+1 else j:=0; while (j+i<=len) and (data[j+1]=data[j+i]) do j:=j+1; ext[i]:=j;k:=i; end; end; chk[1]:=false;chk[2]:=false; ext[len+1]:=0; for i:=1 to len do if not chk[i] then begin j:=len-i+1; while ext[j]=ext[j+i]+i do begin chk[j]:=true; j:=j-i; if j<=0 then break; end; if j=-i+1 then begin writeln(len div i); break; end; end; end; begin assign(input,inputfilename); settextbuf(input,buf); reset(input); assign(output,outputfilename); rewrite(output); while read_data do proceed; close(input); close(output); end. Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator