Cod sursa(job #1213655)

Utilizator RusuAlexeiRusu Alexei RusuAlexei Data 28 iulie 2014 18:09:37
Problema Radix Sort Scor 30
Compilator fpc Status done
Runda Arhiva educationala Marime 1.28 kb
program radixsort;
  type lista=^celula;
       celula=record
                info:longint;
                next:lista;
              end;
  var n,a,b,c,i,x,k:longint;
      a1:array [1..10000000]of longint;
      t:array [0..99999] of lista;
      r,q:lista;
      bufout:array[1..100000] of byte;


begin
  assign(input,'radixsort.in');
  reset(input);
  assign(output,'radixsort.out');
  rewrite(output);
  settextbuf(output,bufout);

  readln(n,a,b,c);
  a1[1]:=b;
  for i:=2 to n do a1[i]:=(a1[i-1]*a+b)mod c;
  for i:=1 to n do
    begin
      new(r);
      r^.info:=a1[i];
      x:=a1[i]mod 100000;
      r^.next:=t[x];
      t[x]:=r;
    end;
  for i:=0 to 99999 do
    begin
      r:=t[i];
      while r<>nil do
        begin
          inc(k);
          a1[k]:=r^.info;
          r:=r^.next;
        end;
      t[i]:=nil;
    end;
  for i:=n downto 1 do
    begin
      new(r);
      r^.info:=a1[i];
      x:=a1[i]div 100000;
      r^.next:=t[x];
      t[x]:=r;
    end;
  k:=0;
  for i:=0 to 99999 do
    begin
      r:=t[i];
      while r<>nil do
        begin
          inc(k);q:=r;
          if k mod 10 = 1 then write(r^.info, ' ');
          r:=r^.next;
          dispose(q);
        end;

    end;
  close(output);
end.