Cod sursa(job #2127083)

Utilizator _Victor_Victor Ciobanu _Victor_ Data 10 februarie 2018 12:14:48
Problema Cifra Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.6 kb
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.