Az alábbi letöltési lehetőségek közül választhatsz: (
segítség)
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 6 KB
uses crt;
type typet = array[1..100,1..199] of record
v:byte;
voltunk:boolean;
end;
var n:integer;
t:typet;
MAX_talalat:longint;
procedure keres(var i,fr:byte);
var a,b:byte;
exit:boolean;
begin
exit := false;
for b:=1 to n do begin
for a:=b to (n*2-b) do begin
if( t[b][a].v = 1 ) and ( not t[b][a].voltunk ) then
begin
fr := a;
t[b][a].voltunk := true;
i:=b;
exit := true;
break;
end;
end;
if( exit ) then break;
end;
end;
procedure folytat(i, fr:byte; var talalat:longint);
var a:byte;
hiba:boolean;
b, x:byte;
db:byte;
save_talalat:longint;
begin
db:=1;
if(i mod 2 <> fr mod 2) then begin
hiba:=false;
if ((db+1)div 2 -1) <> 0 then begin
for a:=1 to ((db+1)div 2 -1) do begin
for b:=(fr+a) to (fr+a + db-2*a - 1) do begin
if( t[i-a][b].v = 0 ) then begin
hiba := true;
break;
end;
end;
end;
if( not hiba ) then begin
talalat := 0;
a:=db;
while (a<> 0) do begin
talalat := talalat+a;
if( a=1 ) then break;
dec(a, 2);
end;
end;
end else begin
end;
hiba := false;
save_talalat := talalat;
for a:=1 to (n-i) do begin
for b:=(fr-a) to (fr-a + db+2*a -1 ) do begin
if( t[i+a][b].v = 0 ) then begin
hiba := true;
break;
end;
end;
if( not hiba ) then begin
talalat := talalat+db+2*a;
end else begin
if (save_talalat = talalat) then begin
talalat := 1;
end;
break;
end;
end;
if (MAX_talalat < talalat ) then MAX_talalat := talalat;
end else
if(i mod 2 = fr mod 2) then begin
if ((db+1)div 2 +i-1) <= n then begin
for a:=1 to ((db+1)div 2 -1) do begin
for b:=(fr+a) to (fr+a + db-2*a - 1) do begin
if( t[i+a][b].v = 0 ) then begin
hiba := true;
break;
end;
end;
end;
if( not hiba ) then begin
talalat := 0;
a:=db;
while (a<> 0) do begin
talalat := talalat+a;
if( a=1 ) then break;
dec(a, 2);
end;
end;
end else begin
end;
hiba := false;
save_talalat := talalat;
if( i-1 > 0 ) then begin
for a:=1 to (i-1) do begin
for b:=(fr-a) to (fr-a + db+2*a -1 ) do begin
if( t[i-a][b].v = 0 ) then begin
hiba := true;
break;
end;
end;
if( not hiba ) then begin
talalat := talalat+db+2*a;
end else begin
if (save_talalat = talalat) then begin
talalat := 1;
end;
break;
end;
end;
end else begin
end;
if (MAX_talalat < talalat ) then MAX_talalat := talalat;
end;
end;
procedure szamol;
var db,fr:byte;
i,x:byte;
talalat:longint;
marvolt:boolean;
begin
MAX_talalat := 0;
while (fr<>0) do begin
db := 0;
fr := 0;
keres(i, fr);
if( fr = 0 ) then break;
talalat:=1;
folytat(i, fr, talalat);
end;
end;
procedure kiurit;
var a,b:byte;
begin
for a:=1 to n do begin
for b:=a to (n*2-a) do begin
t[a][b].v := 0;
t[a][b].voltunk:=false;
end;
end;
end;
procedure beolvas;
var f,fout:text;
i,a:byte;
s:string;
begin
assign(f, 'harmszog.be');
assign(fout, 'text.txt');
rewrite(fout);
reset(f);
while true do begin
readln(f, n);
if( n = 0 ) then break;
for i:=1 to n do begin
readln(f, s);
for a:=i to (n*2-i) do begin
if( s[a] = '-' ) then
t[i][a].v := 1 else t[i][a].v := 0;
t[i][a].voltunk := false;
end;
end;
szamol;
writeln(fout, max_talalat);
kiurit;
end;
close(f);
close(fout);
end;
begin
clrscr;
beolvas;
end.