Cod sursa(job #115545)

Utilizator marius21Petcu Marius marius21 Data 16 decembrie 2007 12:56:57
Problema Grozavesti Scor 100
Compilator fpc Status done
Runda preONI 2008, Runda 2, Clasele 5-8 Marime 1.61 kb
var c,b,a:array[1..301] of longint;
d:array[0..2,0..301] of longint;
f,g:text;
n,nr,aux,x,y,i,j:longint;

procedure scrie(p1,p2:longint);
begin
if p1<>p2 then begin
        writeln(g,'L ',p1,' ',p2);
        writeln(g,'C ',p1,' ',p2);
        end;
end;

procedure  gaseste(i,j:longint; var m:longint);
var di,dj,ai,aj:longint;
begin
ai:=i;
aj:=j;
di:=1;
dj:=0;
while ai<>aj do begin
        if a[ai]>a[aj] then begin
                aux:=a[ai];
                a[ai]:=a[aj];
                a[aj]:=aux;
                aux:=b[ai];
                b[ai]:=b[aj];
                b[aj]:=aux;
                aux:=di;
                di:=-dj;
                dj:=-aux;
                end;
        inc(ai,di);
        inc(aj,dj);
        end;
m:=ai;
end;
procedure sort(x,y:longint);
var m:longint;
begin
if x<=y then begin
        gaseste(x,y,m);
        sort(x,m-1);
        sort(m+1,y);
        end;
end;

begin
assign(f,'grozavesti.in');
assign(g,'grozavesti.out');
reset(f);
rewrite(g);
read(f,n);
for i:=1 to n do
for j:=1 to n do begin
        read(f,x);
        if i=j then  begin a[i]:=x; b[i]:=i; end;
        end;
sort(1,n);
for i:=1 to n do begin
        a[i]:=i;
        c[i]:=i;
        end;
for i:=1 to n do begin
        if a[b[i]]<>a[c[i]] then begin
        inc(nr);
        d[1,nr]:=a[b[i]];
        d[2,nr]:=a[c[i]];
        end;
        aux:=a[b[i]];
        a[b[i]]:=a[c[i]];
        a[c[i]]:=aux;
        c[a[c[i]]]:=c[i];
        c[i]:=b[i];
        end;
writeln(g,nr*2);
for i:=1 to n do
        scrie(d[1,i],d[2,i]);
close(f);
close(g);
end.