http://acm.pku.edu.cn/JudgeOnline/problem?id=1099
Код:
var s,du,dl:array[0..11,0..11] of integer; i,j,k,m:integer; ti:longint; begin ti:=0; repeat inc(ti); readln(m); if m=0 then break; for i:=1 to m do begin for j:=1 to m do read(s[i,j]); readln; end; fillchar(du,sizeof(du),0); fillchar(dl,sizeof(dl),0); for i:=0 to m do for j:=1 to m do if s[i,j]=1 then begin k:=pred(j); while (k>=1) do begin if s[i,k]<>0 then break; dl[i,k]:=-1; dec(k); end; k:=succ(j); while (k<=m) do begin if s[i,k]<>0 then break; dl[i,k]:=1; inc(k); end; k:=pred(i); while (k>=1) do begin if s[k,j]<>0 then break; du[k,j]:=1; dec(k); end; k:=succ(i); while (k<=m) do begin if s[k,j]<>0 then break; du[k,j]:=-1; inc(k); end; end else if s[i,j]=-1 then begin k:=pred(j); while (k>=1) do begin if s[i,k]<>0 then break; dl[i,k]:=1; dec(k); end; k:=succ(j); while (k<=m) do begin if s[i,k]<>0 then break; dl[i,k]:=-1; inc(k); end; k:=pred(i); while (k>=1) do begin if s[k,j]<>0 then break; du[k,j]:=-1; dec(k); end; k:=succ(i); while (k<=m) do begin if s[k,j]<>0 then break; du[k,j]:=1; inc(k); end; end; if ti<>1 then writeln; writeln('Case ',ti,':'); writeln; for i:=1 to 3+(m shl 2) do write('*'); writeln; for i:=1 to m do begin if i<>1 then begin write('*'); for j:=1 to m do write(' H '); writeln(' *'); write('*'); for j:=1 to m do begin write(' '); if (du[i,j]<>1) and (s[i,j]<>1) then write('|') else write(' '); write(' '); end; writeln(' *'); end; write('*'); for j:=1 to m do begin if (dl[i,j]<>1) and (s[i,j]<>-1) then write('H-') else write(' '); write('O'); if (dl[i,j]<>-1) and (s[i,j]<>-1) then write('-H') else write(' '); end; writeln('*'); if i<>m then begin write('*'); for j:=1 to m do begin write(' '); if (du[i,j]<>-1) and (s[i,j]<>1) then write('|') else write(' '); write(' '); end; writeln(' *'); end; end; for i:=1 to 3+(m shl 2) do write('*'); writeln; until false; end.