Pagini recente » Cod sursa (job #1389957) | Cod sursa (job #1192740) | Diferente pentru implica-te/arhiva-educationala intre reviziile 160 si 159 | Cod sursa (job #410913) | Cod sursa (job #1853117)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin ("radixsort.in");
ofstream cout ("radixsort.out");
const int MaxN = 10000005, BlockMod = 256;
int n, a, b, c;
int v[MaxN], modCount[BlockMod + 5], auxV[MaxN];
int main() {
cin >> n >> a >> b >> c;
v[1] = b;
for (int i = 2; i <= n; ++i) {
v[i] = (a * v[i - 1] + b) % c;
}
for (int currBlock = 0; currBlock < 32; currBlock += 8) {
memset(modCount, 0, sizeof modCount);
for (int i = 1; i <= n; ++i) {
int currMod = (v[i] >> currBlock) % BlockMod;
++modCount[currMod + 1];
}
for (int i = 1; i <= 256; ++i) {
modCount[i] += modCount[i - 1];
}
memset(auxV, 0, sizeof auxV);
for (int i = 1; i <= n; ++i) {
int currMod = (v[i] >> currBlock) % BlockMod;
auxV[++modCount[currMod]] = v[i];
}
for (int i = 1; i <= n; ++i) {
v[i] = auxV[i];
}
}
for (int i = 1; i <= n; i += 10) {
cout << v[i] << ' ';
}
return 0;
}