Cod sursa(job #1163423)

Utilizator nickulNic Kul nickul Data 1 aprilie 2014 12:52:35
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<fstream>
#include<vector>
 
using namespace std;
 
ifstream in("radixsort.in");
ofstream out("radixsort.out");
 
int main()
{
    unsigned int n,a,b,c,i,j;
    vector<unsigned int> v;
    vector< vector<unsigned int> > v1,v2;
	v1.resize(1<<8);
	v2.resize(1<<8);
    in>>n>>a>>b>>c;
    v.push_back(b);
	v1.at(v.at(0)&0x000000FF).push_back(v.at(0));
    for(i=1;i<n;i++)
	{
		v.push_back((1LL*v.at(i-1)*a+b)%c);
		v1.at(v.at(i)&0x000000FF).push_back(v.at(i));
	}
	v.resize(0);
	for(i=0;i<1<<8;i++)
		for(j=0;j<v1.at(i).size();j++)
			v2.at((v1.at(i).at(j)&0x0000FF00)>>8).push_back(v1.at(i).at(j));
	v1.resize(0);
	v1.resize(1<<8);
	for(i=0;i<1<<8;i++)
		for(j=0;j<v2.at(i).size();j++)
			v1.at((v2.at(i).at(j)&0x00FF0000)>>16).push_back(v2.at(i).at(j));
	v2.resize(0);
	v2.resize(1<<8);
	for(i=0;i<1<<8;i++)
		for(j=0;j<v1.at(i).size();j++)
			v2.at((v1.at(i).at(j)&0xFF000000)>>24).push_back(v1.at(i).at(j));
	v1.resize(0);
	for(i=0;i<1<<8;i++)
		for(j=0;j<v2.at(i).size();j++)
			v.push_back(v2.at(i).at(j));
    for(i=0;i<n;i+=10) out<<v.at(i)<<" ";
}