Pagini recente » Cod sursa (job #434899) | Cod sursa (job #1693835) | Cod sursa (job #1806747) | Cod sursa (job #1773661) | Cod sursa (job #1559672)
#include <stdio.h>
#define Nadejde 1000001
int N;
int A[Nadejde];
int B[Nadejde];
int C[Nadejde];
int next[Nadejde];
int color[Nadejde];
/** max(X, Y). **/
int MAX(int X, int Y) {
return X > Y ? X : Y;
}
/** Precalculeaza valorile A, B si C. **/
void init() {
int i, tmp;
for (i = next[1] = 2; i < N; i++) {
next[i] = i + 1;
A[i] = (1LL * A[i - 1] * i) % N;
B[i] = (1LL * B[i - 1] * i) % N;
C[i] = (1LL * C[i - 1] * i) % N;
if (B[i] < A[i]) {
tmp = A[i];
A[i] = B[i];
B[i] = tmp;
}
}
}
int main(void) {
int i, j, tmp;
FILE *f = fopen("curcubeu.in", "r");
/* Citirea datelor. */
fscanf(f, "%d %d %d %d", &N, &A[1], &B[1], &C[1]);
fclose(f);
init();
/* Calcularea solutiei. */
for (i = N - 1; i; i--) {
for (j = A[i]; j <= B[i]; ) {
if (color[j]) {
tmp = next[j];
next[j] = MAX(next[j], B[i] + 1);
j = tmp;
} else {
color[j] = C[i];
next[j++] = B[i] + 1;
}
}
}
/* Afisarea solutiei. */
freopen("curcubeu.out", "w", stdout);
for (i = 1; i < N; i++) {
fprintf(stdout, "%d\n", color[i]);
}
fclose(stdout);
/// Multumim Doamne!
puts("Doamne ajuta!");
return 0;
}