Pagini recente » Cod sursa (job #1161919) | Cod sursa (job #664958) | Cod sursa (job #2576400) | Cod sursa (job #2432851) | Cod sursa (job #1995465)
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
typedef vector<unsigned int> VI;
typedef queue<unsigned int> QI;
int n, A, B, C;
VI v;
void read()
{
ifstream is("radixsort.in");
is >> n >> A >> B >> C;
is.close();
}
void generate()
{
v = VI(n + 1);
v[1] = B;
for (int i = 2; i <= n; ++i)
v[i] = (A * v[i - 1] + B) % C;
}
void write();
void sort(int key)
{
QI b[11];
for (int i = 1; i <= n; ++i)
b[v[i] <= key ? 10 : (v[i] / key) % 10].push(v[i]);
int cnt = 1;
while (!b[10].empty())
{
v[cnt++] = b[10].front();
b[10].pop();
}
for (int i = 0; i <= 9; ++i)
while (!b[i].empty())
{
v[cnt++] = b[i].front();
b[i].pop();
}
}
void solve()
{
for (int i = 1; i <= C * 10; i *= 10)
sort(i);
}
void write()
{
ofstream os("radixsort.out");
for (int i = 1; i <= n; i += 10)
os << v[i] << " ";
os.close();
}
int main()
{
read();
generate();
solve();
write();
return 0;
}