Cod sursa(job #304717)

Utilizator FllorynMitu Florin Danut Flloryn Data 15 aprilie 2009 05:30:01
Problema Grozavesti Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.87 kb
{sa aduci pe diagonala principala in matrice doar valori crescatore}
program pascal;
type el=record
     lit:char;
     l1,l2:longint;
     end;
var f,g:text;    a:array[1..300,1..300] of longint; q:array[1..700] of el;
                 min,i,j,p,n,k,x,y:longint;   ok:boolean;
  procedure citire;
  begin
  assign(f,'grozavesti.in'); reset(f);
  assign(g,'grozavesti.out'); rewrite(g);
  readln(f,n);
  for i:=1 to n do
    begin
    for j:=1 to n do read(f,a[i,j]);
    readln(f);
    end;
  end;

  procedure interschimbare;
  var t:integer; aux:longint;
  begin
  for t:=1 to n do
    begin
    aux:=a[x,t];
    a[x,t]:=a[i,t];
    a[i,t]:=aux;
    end;
  end;

  procedure interschimbare2;
  var t:integer; aux:longint;
  begin
    for t:=1 to n do
      begin
      aux:=a[t,y];
      a[t,y]:=a[t,i];
      a[t,i]:=aux;
      end;
  end;

  procedure grozav;
  begin
  p:=0;
  for i:=1 to n do
    begin
    min:=a[i,i];
    for j:=i to n do
    for k:=i to n do
    if a[j,k]<min then
            begin
            min:=a[j,k];
            x:=j;
            y:=k;
            end;
    if min<>a[i,i] then
       begin
       if x<>i then
           begin
           p:=p+1;
           q[p].lit:='L';
           q[p].l1:=x;
           q[p].l2:=i;
           interschimbare;
           end;
       if y<>i then
           begin
           p:=p+1;
           q[p].lit:='C';
           q[p].l1:=y;
           q[p].l2:=i;
           interschimbare2;
           end;
       end;
     end;

   ok:=true;
   for i:=1 to n-1 do
   if a[i,i]>a[i+1,i+1] then
           begin
           ok:=false;
           break;
           grozav;
           end;
  end;

  procedure afisare;
  begin
  writeln(g,p);
  for i:=1 to p do writeln(g,q[i].lit,' ',q[i].l1,' ',q[i].l2);
  close(g);
  end;

begin
citire;
grozav;
afisare;
end.