Pagini recente » Cod sursa (job #344568) | Cod sursa (job #2954025) | Diferente pentru home intre reviziile 186 si 902 | Monitorul de evaluare | Cod sursa (job #2025076)
#include <fstream>
#include <iostream>
#include <queue>
using namespace std;
ifstream fin ("radixsort.in");
long long n,a,b,c,i,maxi,curent,rsp,stop;
int v[10000005];
queue < int > q[260];
int main()
{
fin>>n>>a>>b>>c;
for( i = 1 ; i <= n ; i++ )
{
v[ i ] = ( 1LL* v[ i - 1 ] * a + b ) % c;
maxi = max( maxi , v[ i ] * 1LL );
}
curent = 1;
stop = 1;
while( stop )
{
for( i = 1 ; i <= n ; i++ )
{
a = ( v[ i ] / curent ) % 256;
q[ a ].push( v[ i ] );
}
rsp = 0;
for( i = 0 ; i <= 256 ; i++ )
{
while( q[ i ].size() )
{
v[ ++rsp ] = q[ i ].front();
q[ i ].pop();
}
}
if( maxi / 256 < curent )
stop = 0;
else
curent *= 256;
}
FILE *fout;
fout = fopen( "radixsort.out" , "w" );
for( i = 0 ; i < n / 10; i++ )
fprintf(fout , "%d " , v[ 10 * i + 1 ] );
}