Cod sursa(job #92190)

Utilizator filipbFilip Cristian Buruiana filipb Data 14 octombrie 2007 13:31:35
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>

#define maxim(a, b) ((a > b) ? a : b)
#define ll long long
#define NMax 1000005

int N, A[NMax], B[NMax], C[NMax], color[NMax], nxt[NMax];

int next(int x)
{
    int y = x, urm;
    
    while (color[x])
        x = nxt[x];
    while (color[y])
        urm = nxt[y], nxt[y] = x, y = urm;
    return x;
}

int main(void)
{
    int i, j;
    
    freopen("curcubeu.in", "r", stdin);
    freopen("curcubeu.out", "w", stdout);

    scanf("%d %d %d %d", &N, &A[1], &B[1], &C[1]);
    for (i = 2; i < N; i++)
        A[i] = ((ll)A[i-1] * i) % N,
        B[i] = ((ll)B[i-1] * i) % N,
        C[i] = ((ll)C[i-1] * i) % N;

    for (i = 1; i < N; i++)
        if (A[i] > B[i])
            j = A[i], A[i] = B[i], B[i] = j;

    for (i = 1; i <= N; i++) nxt[i] = i;
    
    for (i = N-1; i; i--)
        for (j = next(A[i]); j <= B[i]; j = next(j+1))
            color[j] = C[i], nxt[j] = B[i]+1;
    
    for (i = 1; i < N; i++)
        printf("%d\n", color[i]);
        

    return 0;
}