Pagini recente » Cod sursa (job #1765917) | Cod sursa (job #2258543) | Cod sursa (job #2367597) | Cod sursa (job #2529344) | Cod sursa (job #1222444)
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
#define NMAX 10000001
int v[NMAX],P[10];
vector <int> s[10];
int cifre(int x)
{
if(x==0)
return 0;
return 1+cifre(x/10);
}
void radix(int p, int q, int digit)
{
int i,j,k;
if(p==q || digit==-1)
return ;
for(i=p;i<=q;i++)
s[(v[i]/P[digit])%10].push_back(v[i]);
j=p-1;
for(i=0;i<=9;i++) {
for(vector <int> :: iterator it=s[i].begin();it!=s[i].end();it++)
v[++j]=*it;
s[i].clear();
}
for(i=p;i<=q;i++) {
k=(v[i]/P[digit])%10;
j=i;
while((v[j+1]/P[digit])%10==k)
j++;
radix(i,j,digit-1);
i=j;
}
}
int main ()
{
int n,i,x,a,b,c,l;
ifstream f("radixsort.in");
ofstream g("radixsort.out");
f>>n>>a>>b>>c;
v[1]=b;
for(i=2;i<=n;i++)
v[i]=(0LL+1LL*a*v[i-1]+b)%c;
f.close();
l=-1;
for(i=1;i<=n;i++) {
if(v[i]==0)
x=1;
else x=cifre(v[i]);
if(x>l)
l=x;
}
l--;
P[0]=1;
for(i=1;i<=l;i++)
P[i]=P[i-1]*10;
radix(1,n,l);
for(i=1;i<=n;i=i+10)
g<<v[i]<<" ";
g.close();
return 0;
}