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 |
手测原始数据40组,无错误。仍然wa.type rec=record p,opp:longint; end; var i,j,k,l,len,t:longint; s,s1,s2,ts:string; f:array[1..101,1..101]of longint; link:array[1..101,1..101]of rec; function calc(x:longint):longint; begin if x<10 then exit(1); exit(2); end; procedure print(h,t:longint); var op,pp,i:longint; begin op:=link[h,t].opp;pp:=link[h,t].p; if pp=0 then begin for i:=h to t do write(s[i]); exit; end; if op=1 then begin print(h,pp); print(pp+1,t); end; if op=2 then begin write((t-h+1)div(pp-h+1)); write('('); print(h,pp); write(')'); end; end; begin readln(s);len:=length(s); for i:=1 to len do for j:=i to len do f[i,j]:=j-i+1; for i:=1 to len do f[i,i]:=1; for l:=2 to len do for i:=1 to len-l+1 do begin j:=i+l-1; s2:=copy(s,i,j-i+1); for k:=i to j-1 do if f[i,k]+f[k+1,j]<f[i,j] then begin f[i,j]:=f[i,k]+f[k+1,j]; with link[i,j] do begin p:=k; opp:=1; end; end; for k:=i to j-1 do if ((j-i+1)mod(k-i+1)=0) then begin t:=0; s1:=copy(s,i,k-i+1);ts:=s1; while (s1<>s2)and(length(s1)<=length(s2)) do begin s1:=s1+ts;inc(t);end; if (s1=s2)and(f[i,j]>f[i,k]+2+calc(t)) then begin f[i,j]:=f[i,k]+2+calc(t); with link[i,j] do begin p:=k; opp:=2; end; end; end; end; print(1,len); writeln; end. Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator