Pagini recente » Cod sursa (job #1796025) | Cod sursa (job #2978375) | Cod sursa (job #380065) | Cod sursa (job #1282369) | Cod sursa (job #1460070)
#include <cstdio>
#define NMAX 1000000
int N, A, B, C;
int col[NMAX + 1];
int ant[NMAX + 1];
int vA[NMAX], vB[NMAX], vC[NMAX];
inline int finalAnt (int x) {
if (ant[x] != x) {
return ant[x] = finalAnt (ant[x]);
}
return x;
}
int main () {
freopen ("curcubeu.in", "r", stdin);
freopen ("curcubeu.out", "w", stdout);
scanf ("%d%d%d%d", &N, &A, &B, &C);
for (int crt = 1; crt < N; crt++) {
ant[crt] = crt;
A = (A * crt) % N;
B = (B * crt) % N;
C = (C * crt) % N;
vA[crt] = A;
vB[crt] = B;
vC[crt] = C;
}
for (int q = N - 1; q >= 1; q--) {
if (vA[q] > vB[q]) {
A = vB[q];
B = vA[q];
}
else {
A = vA[q];
B = vB[q];
}
C = vC[q];
int i;
for (i = finalAnt (B); i >= A; i = finalAnt(i - 1)) {
col[i] = C;
ant[i] = A - 1;
}
ant[B] = i;
}
for (int i = 1; i <= N - 1; i++) {
printf ("%d\n", col[i]);
}
return 0;
}