Pagini recente » Cod sursa (job #1130048) | Cod sursa (job #12438) | Cod sursa (job #2319545) | Cod sursa (job #811484) | Cod sursa (job #1519456)
type nd=^nod;
nod=record
val,uc:longint;
next:nd
end;
coada=record
inc,sf:nd;
nr:longint
end;
buckets=array[0..9]of coada;
var bk:array[0..1]of buckets;
f:text;
n,a,b,c,x,i,k:longint;
p:nd;
procedure adauga(unde,ce,cifra:longint);
var p:nd;
begin
new(p);
p^.val:=ce;
p^.uc:=cifra div 10;
p^.next:=nil;
inc(bk[unde][cifra mod 10].nr);
if bk[unde][cifra mod 10].sf<>nil then
bk[unde][cifra mod 10].sf^.next:=p;
bk[unde][cifra mod 10].sf:=p;
if bk[unde][cifra mod 10].inc=nil then
bk[unde][cifra mod 10].inc:=p
end;
procedure muta(unde:longint);
var j:byte;
p,pp:nd;
begin
for j:=0 to 9 do
begin
p:=bk[unde][j].inc;bk[unde][j].nr:=0;
bk[unde][j].inc:=nil;
bk[unde][j].sf:=nil;
while p<>nil do
begin
adauga((unde+1)mod 2,p^.val,p^.uc);
pp:=p;
p:=p^.next;
freemem(pp,sizeof(nod));
end;
end;
end;
begin
assign(f,'radixsort.in');
reset(f);
readln(f,n,a,b,c);
close(f);
for i:=1 to n do
begin
if i=1 then x:=b
else x:=(x*a+b)mod c;
adauga(0,x,x)
end;
k:=1;
repeat
inc(k);k:=k mod 2;
muta(k);
until bk[(k+1)mod 2][0].nr>=n;
p:=bk[(k+1)mod 2][0].inc;
i:=0;
assign(f,'radixsort.out');
rewrite(f);
while p<>nil do
begin
inc(i);
if i mod 10 = 1 then
write(f,p^.val,' ');
p:=p^.next;
end;
close(f);
end.