Cod sursa(job #1519632)

Utilizator ili226Vlad Ilie ili226 Data 7 noiembrie 2015 16:54:12
Problema Sortare prin comparare Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 0.98 kb
type sir=array[0..{100}500000]of longint;
var f:text;
    k,i,n,a,b,c,x,sk,max:longint;
    v:array[0..1]of sir;
    count,poz:array[0..9]of longint;
    sortat:boolean;
begin
assign(f,'radixsort.in');
reset(f);
readln(f,n,a,b,c);
close(f);
x:=b;max:=b;
for i:=0 to n-1 do
 begin
  if i<>0 then
   x:=(x*a+b)mod c;
  v[0][i]:=x;
  if x>max then max:=x;
 end;
k:=1;sk:=1;
repeat
 inc(sk);sortat:=true;
 sk:=sk mod 2;
 for i:=0 to 9 do
  count[i]:=0;
 for i:=0 to 9 do
  poz[i]:=0;
 for i:=0 to n-1 do
  begin
   inc(count[(v[sk][i]div k)mod 10]);
   if v[sk][i] div k>0 then sortat:=false
  end;
 poz[0]:=0;
 for i:=1 to 9 do
  poz[i]:=poz[i-1]+count[i-1];
 for i:=0 to n-1 do
  begin
   v[(sk+1)mod 2][poz[(v[sk][i]div k)mod 10]]:=v[sk][i];
   inc(poz[(v[sk][i] div k)mod 10]);
  end;
 k:=k*10;
until sortat;
assign(f,'radixsort.out');
rewrite(f);
i:=0;
while i<=n-1 do
 begin
  write(f,v[(sk+1)mod 2][i],' ');
  inc(i,1{0});
 end;
close(f);
end.