Pagini recente » Cod sursa (job #605916) | Cod sursa (job #2306299) | Cod sursa (job #1632475) | Cod sursa (job #1903488) | Cod sursa (job #2554354)
#include<cstdio>
#include<vector>
#include<cctype>
#define MAX_BUCKETS 10
#define BUF_SIZE 1 << 19
#define BASE 10
using namespace std;
vector<int>v;
char buf[BUF_SIZE];
int n, a, b, c, maxim, pos = BUF_SIZE;
inline char getChar(FILE* fin) {
if(pos == BUF_SIZE) {
fread(buf, 1, BUF_SIZE, fin);
pos = 0;
}
return buf[pos++];
}
inline int read(FILE* fin) {
int res = 0;
char ch;
do {
ch = getChar(fin);
}while(!isdigit(ch));
do {
res = 10*res + ch - '0';
ch = getChar(fin);
}while(isdigit(ch));
return res;
}
void readArray() {
FILE* fin = fopen("radixsort.in", "r");
n = read(fin);
a = read(fin);
b = read(fin);
c = read(fin);
v.push_back(b);
maxim = b;
for(int i = 1; i < n; i++) {
v.push_back((a * v[v.size() - 1] + b) % c);
if(v[v.size() - 1] > maxim)
maxim = v[v.size() - 1];
}
fclose(fin);
}
void radixSort(vector<int> &a) {
vector<int>::iterator it;
int i, exp, m;
for(exp = 1; maxim / exp > 0; exp *= 10) {
vector<int>g[MAX_BUCKETS];
for(it = a.begin(); it != a.end(); ++it)
g[((*it) / exp) % BASE].push_back((*it));
m = 0;
for(i = 0; i < BASE; ++i) {
for(it = g[i].begin(); it != g[i].end(); ++it)
a[m++] = (*it);
}
}
}
void writeArray() {
FILE* fout = fopen("radixsort.out", "w");
for(int i = 0; i < v.size(); i += 10)
fprintf(fout,"%d ",v[i]);
fprintf(fout,"\n");
fclose(fout);
}
int main() {
readArray();
radixSort(v);
writeArray();
return 0;
}