Cod sursa(job #1155546)

Utilizator adireusadireus adireus Data 26 martie 2014 23:07:38
Problema Radix Sort Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int N, A, B, C;
int work[10000000];

void
readData ()
{
  ifstream in ("radixsort.in");

  in >> N >> A >> B >> C;
  int temp = B;

  work[0] = B;
  for (int i = 1; i < N; i++)
    {
      temp = (1LL * A * temp + B) % C;
      work[i] = temp;
    }
  in.close();
}

void
radix (int  step)
{
  vector < int >buckets[256];
  unsigned int mask = 0x000000ff;
  
      int offset = 8 * step;
	  for (int i = 0; i < N; i++)
	{
	  buckets[(work[i] >> offset) & mask].push_back (work[i]);
	}

      int idx = 0;
      for (int i = 0; i <= 255; i++)
	{
	  for (vector<int>::iterator it = buckets[i].begin (); it != buckets[i].end (); ++it)
	    {
	      work[idx++] = (*it);
	    }
	}
    
}

void solve()
{
    for (int i = 0; i <= 3; i++)
    {
        radix(i);
    }
}

void
print ()
{
  ofstream of ("radixsort.out");
  for (int i = 0; i < N; i = i + 10)
    of << work[i] << ' ';


  of.close();

}

int
main ()
{
  readData ();
  solve ();
  print ();
  return 0;
}