Cod sursa(job #371425)

Utilizator silvia_the_bestSilvia Pripoae silvia_the_best Data 5 decembrie 2009 13:03:47
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <cstdio>

#define FIN "curcubeu.in"
#define FOUT "curcubeu.out"

#define N 1000002

int n;
int a[N], b[N], c[N], color[N], next[N];

void swap(int p, int A[], int B[])
{
    int aux;

    aux = A[p];

    A[p] = B[p];

    B[p] =  aux;
}

void read()
{
    int i;

    freopen(FIN, "r", stdin);
    freopen(FOUT, "w", stdout);

    scanf("%d%d%d%d", &n, &a[1], &b[1], &c[1]);

    for (i = 2; i <= n; ++ i)
    {
        a[i] = ((long long) a[i - 1] * i) % n;
        b[i] = ((long long) b[i - 1] * i) % n;
        c[i] = ((long long) c[i - 1] * i) % n;
    }
}

int main()
{
    int i, j, aux;

    read();

    for (i = 1; i <= n; ++ i)
    {
        if (a[i] > b[i])
            swap(i, a, b);

        next[i] = i + 1;
    }

    for (i = n - 1; i; -- i)
        for (j = a[i]; j <= b[i]; )
        {
            if (!color[j])  color[j] = c[i];

            aux = j, j = next[j], next[aux] = b[i] + 1;
        }

    for (i = 1; i < n; ++ i)
        printf("%d\n", color[i]);

    //printf("\n");
}