Pagini recente » Cod sursa (job #1890750) | Cod sursa (job #1799960) | Cod sursa (job #2232655) | Cod sursa (job #708884) | Cod sursa (job #2127083)
Program Acoperis;
type rand = record
num: 0..20000;
x: 1..200;
end;
var pan: array[1..200,1..200] of 0..1;
r1,r2: array [1..200] of rand;
m,i,j,k1,k2,n: 1..200;
v:rand;
x: 1..200;
num1,num2: 0..20000;
isSame:boolean;
f,g: text;
begin
assign(f,'D:\in_outs\acoperis.in');
assign(g,'D:\in_outs\acoperis.out');
reset(f);
rewrite(g);
readln(f,m);
for i:= 1 to m do begin
for j:= 1 to m do
read(f,pan[i,j]);
readln(f);
end;
{Deplasarea pe orizontala a panourilor}
for i:=1 to m do
for j:=1 to m do begin
if pan[i,j] = 1 then begin
x:= 1;
while (j<>m) and (pan[i,j + 1] = 1) do
begin
x:= x + 1;
j:= j + 1;
end;
for n:= 1 to k1 do
if (r1[n].x = x) then begin
r1[n].num := r1[n].num + 1;
isSame:= true;
end;
if isSame = true then
isSame:= false
else begin
k1:= k1 + 1;
r1[k1].x := x;
r1[k1].num := 1;
end;
end;
end;
for i:= 1 to k1 do
for j:=1 to k1 do
if r1[i].x < r1[j].x then begin
v:=r1[j];
r1[j]:= r1[i];
r1[i]:= v;
end;
num1:= 0;
for i:= 1 to k1 do
num1:= num1 + r1[i].num;
{Calcularea pe verticala}
for i:=1 to m do
for j:=1 to m do begin
if pan[j,i] = 1 then begin
x:= 1;
while (j<>m) and (pan[j+1,i] = 1) do
begin
x:= x + 1;
j:= j + 1;
end;
for n:= 1 to k2 do
if (r2[n].x = x) then begin
r2[n].num := r2[n].num + 1;
isSame:= true;
end;
if isSame = true then
isSame:= false
else begin
k2:= k2 + 1;
r2[k2].x := x;
r2[k2].num := 1;
end;
end;
end;
for i:= 1 to k1 do
for j:=1 to k1 do
if r1[i].x < r1[j].x then begin
v:=r1[j];
r1[j]:= r1[i];
r1[i]:= v;
end;
num2:= 0;
for i:= 1 to k2 do
num2:= num2 + r2[i].num;
for i:= 1 to k2 do
for j:=1 to k2 do
if r2[i].x < r2[j].x then begin
v:=r2[j];
r2[j]:= r2[i];
r2[i]:= v;
end;
if num1 < num2 then begin
writeln(g,num1);
for i:=1 to k1 do
writeln(g,r1[i].x,' ',r1[i].num);
end else
begin
writeln(g,num2);
for i:=1 to k2 do
writeln(g,r2[i].x,' ',r2[i].num);
end;
close(f);
close(g);
end.