Pagini recente » Cod sursa (job #110264) | Cod sursa (job #3292916)
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
#include <iostream>
#include <bits/stdc++.h>
#define VMAX 10000005
#define INF 2147000000
using namespace std;
ifstream fin ("radixsort.in");
ofstream fout ("radixsort.out");
int numere[2][VMAX];
int frcv[10];
int stanga[10];
long long int a,b,c;
signed main()
{
long long int n,m,i,j,k,t,q,nr,p;
bool turn;
fin>>n>>a>>b>>c;
nr=0;
for(i=1;i<=n;i++)
{
nr=(a*nr+b)%c;
numere[0][i]=nr;
}
for(p=1, turn = true;1;p*=10,turn=!turn)
{
for (i = 0; i < 10; ++i)
frcv[i] = 0;
for(j=1;j<=n;j++)
{
frcv[(numere[!turn][j]/p)%10]++;
}
if(frcv[0]==n)
break;
stanga[0]=1;
for(i=1;i<10;i++)
stanga[i]=stanga[i-1]+frcv[i-1];
for(j=1;j<=n;j++)
{
numere[turn][stanga[(numere[!turn][j]/p)%10]++]=numere[!turn][j];
//un numar din grupa j va avea stanga[j] numere in fata sa, iar fara cifra sata
// ele sunt sortate crescator, deci in ordinea aparitiei, ele vor ocupa stanga[j], stanga[j+1]
// deci putem face stanga[j]++ pentru a ajunge la acea pozitie
}
}
for(i=1;i<=n;i+=10)
fout<<numere[!turn][i]<<' ';
fout<<'\n';
return 0;
}