Pagini recente » Cod sursa (job #929025) | Cod sursa (job #795898) | Cod sursa (job #2236089) | Cod sursa (job #2822040) | Cod sursa (job #1887945)
#include <fstream>
using namespace std;
ifstream f("radixsort.in");
ofstream g("radixsort.out");
int v[10000003];
int n;
typedef int ll;
typedef long long ll1;
ll getmax()
{
ll i,maxim=0;
for(i=1;i<=n;i++)
{
if(maxim<v[i])
maxim=v[i];
}
return maxim;
}
void afisare(int a[])
{
for(ll i=1;i<=n;i+=10)
g<<a[i]<<" ";
}
ll cifre[12];
void radix(int a[],int b[],ll exp)
{
ll i;
for(i=0;i<=9;i++)
cifre[i]=0;
for(i=1;i<=n;i++)
cifre[(a[i]/exp)%10]+=1;
for(i=1;i<=9;i++)
cifre[i]+=cifre[i-1];
for(i=n;i>=1;i--)
{
b[cifre[(a[i]/exp)%10]]=a[i];
cifre[(a[i]/exp)%10]-=1;
}
}
int main()
{
ll1 j,a,b,c,exp,i,maxim;
f>>n>>a>>b>>c;
v[1]=b;
for(i=2;i<=n;i++)
v[i]=(ll1(a) *v[i-1]+b)%c;
maxim=getmax();
j=1;
int output[100003];
for(exp=1;maxim/exp>0;exp*=10)
{
if(j%2==1)
radix(v,output,exp);
else
radix(output,v,exp);
j+=1;
}
if(j%2==1)
afisare(v);
else
afisare(output);
f.close();
g.close();
return 0;
}